Sunday, November 1, 2009

Tạo một form mail bằng PHP 2

Để có thể làm được form mail, tất nhiên là phải dùng đến một ngôn ngữ script cho phép xử lý lệnh trên server chứ không thể dùng các ngôn ngữ xử lý lệnh tại trình duyệt như JavaScript hay VBScript. Tôi quyết định chọn PHP vì đây là một ngôn ngữ khá mềm dẻo, dễ dùng, cthể nhúng vào các trang HTML và cũng không đòi hỏi cài đặt rắc rối. Tất nhiên là muốn dùng nó thì server nơi bạn lưu website của mình phải hỗ trợ PHP thì mớiđược.

Nguyên lý chung của một formmail là chúng ta phải có một tệp .HTM, trong đó có một form để thu thập nhữngthông tin bạn muốn người dùng điền vào, và một tệp .PHP để gửi các thông tin đóvề cho bạn. Chúng ta hãy xem xét từng tệp một.

Tệp EZMAIL.HTM có cấu tạo nhưmột tệp HTM điển hình khác. Phần đầu <HEAD></HEAD> nêu lên tiêu đề của trang vàấn định tập ký tự sẽ sử dụng. Ở đây chúng ta dùng tập Unicode rút gọn 8-bit làmột tập ký tự phổ biến để hiển thị tiếng Việt trên Internet hiện nay.

Phần thân <BODY></BODY> củatệp EZMAIL.HTM chỉ bao gồm duy nhất một form, trong đó có 4 thành phần chính:

  • Một ô văn bản để nhập tên người sẽ gửi thư cho bạn, ô này được đặttên là SenderName.

  • Một ô văn bản để nhập địa chỉ e-mail của người gửi thư cho bạn, ônày được đặt tên là SenderEmail.

  • Một ô văn bản để người gửi thư cho bạn nhập chủ đề vắn tắt nộidung họ muốn nói, ô này có tên là Subject.

  • Một vùng văn bản để nhập nội dung thư, vùng này có tên là Message. Vùng văn bản có thể có nhiều dòng và nhiều cột, trong khi ô văn bảnchỉ có một dòng mà thôi.

Ngoài ra, còn có hai thànhphần không thể thiếu của một form là các nút để ra lệnh cho form gửi thông tinđi hoặc xoá những thông tin đã có để điền lại.

Các thành phần trên sẽ đượchiện lên trình duyệt web để người dùng có thể nhập vào các thông tin cần thiết(xem hình). Bên cạnh đó, form cũng có một số thành phần ẩn khác phục vụ cho việcxử lý form. Cũng như các thành phần ở trên, đây thực chất là các biến(variable), nhưng có điều khác là các biến này đã nhận giá trị do chúng ta gáncho ngay từ đầu chứ không phải do người duyệt web đưa vào. Bạn có thể tuỳ ý thayđổi giá trị các biến này (phần theo sau
VALUE=) cho đúng với nhu cầucủa bạn.

  • Biến RecipientEmail là địa chỉ e-mail mà thư sẽ được gửiđến. Tất nhiên là bạn muốn những thông tin người dùng điền vào phải được gửi vềcho bạn, vì vậy hãy đưa địa chỉ e-mail của bạn vào đây.

  • Biến DefaultSubject là chủ đề mặc định của thư trong trườnghợp người dùng không nhập thông tin gì vào ô văn bản chủ đề.

  • Biến RedirectPage chứa địa chỉ một trang web mà người dùngsẽ chuyển đến sau khi gửi thư đi. Thông thường, đó là một trang web cám ơn ngườidùng hoặc trang chủ website của bạn.

  • Biến CcEmail là địa chỉ e-mail mà bạn muốn cũng nhận đượcthông tin do người dùng gửi đến. Ví dụ nếu là một form nhận ý kiến phản hồi củakhách hàng, bạn có thể lấy RecipientEmaillà địa chỉ công ty và CcEmaillà địa chỉ của riêng bạn.
Trừ biến RecipientEmaillà bắt buộc phải có để form có thể hoạt động được, bạn có thể bỏ 3 biến còn lạinếu thấy không cần thiết.

Lưu ý là trong PHP 3.0, khingười dùng gửi form đi thì tên các thành phần trong form tự động chuyển thànhtên biến tương ứng trong tệp EZMAIL.PHP (trong PHP 4.0 trở lên thì không nhấtthiết như vậy), do đó nếu bạn muốn đổi tên một thành phần trong form ở tệpEZMAIL.HTM thì bạn cũng phải đổi tên biến tương ứng trong tệp EZMAIL.PHP.

Giờ ta xem xét đến tệp thứhai, EZMAIL.PHP, chứa các mã cần thiết để xử lý form và gửi thông tin từ ngườidùng về cho chúng ta. Đây thực sự là một chương trình (dù rất đơn giản) nên nếuđã biết qua các ngôn ngữ như C hay JavaScript, bạn sẽ thấy chương trình này rấtdễ hiểu.

Trước hết, có hai thông tin màbạn luôn muốn biết khi nhận được thư. Đó là địa chỉ e-mail của người gửi (để bạncó thể trả lời hoặc trao đổi thêm thông tin cần thiết) và nội dung thư (vì mộtlá thư không thể không có nội dung gì). Ta hãy kiểm tra các biến này, nếu cácbiến này để trống thì hiện thông báo cho người dùng biết và thoát khỏi chươngtrình:

if ((!$SenderEmail) ||(!$Message)) {

echo ("Missing your emailor message!");

exit ();

}

Sau đó, ta kiểm tra xem địachỉ e-mail của người dùng nhập vào có hợp lệ không. Một địa chỉ e-mail hợp lệ làđịa chỉ có dạng user@isp.com, tức là phải có một dấu @ và sau dấu @ phảicó ít nhất một dấu chấm. Ngoài ra, các ký tự trong địa chỉ có thể là chữ cái,chữ số, dấu _. Ta sử dụng hàm eregi() của PHP để làm việc này. Nếu thấyđịa chỉ e-mail không hợp lệ thì ra thông báo và thoát khỏi chương trình:

if(!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $SenderEmail)) {

echo ("Your email addressis invalid");

exit ();

}

Tiếp theo, chúng ta kiểm tra ôchủ đề. Nếu người dùng bỏ qua không nhập gì vào ô này thì chúng ta sẽ sử dụngchủ đề mặc định:

if (!$Subject)

$Subject =$DefaultSubject;

Để đưa thông tin về người gửivào ngay trong thư, chúng ta sử dụng thêm một biến là $Headers. Các thôngtin trong biến này sẽ hiện lên ở thanh tiêu đề của mỗi lá thư khi chúng ta xemthư trong các chương trình như Outlook Express, Eudora. Nếu bạn sử dụng cả biến

$CcEmail thì tên địa chỉ e-mail bổ sung này cũng sẽ hiện ở đây.

$Headers .= "From: $SenderName<$SenderEmail>\r\nReply-To: $SenderEmail";

if ($CcEmail)

$Headers .= "\r\nCc:$CcEmail";

Mọi thành phần cấu tạo nên láthư đã xong. Ta chỉ việc gửi thư đi bằng hàm mail() của PHP. Hàm này nhận4 tham số là tên người nhận, chủ đề, nội dung thư và các thông tin bổ trợ trongbiến $Headers.

mail ($RecipientEmail,$Subject, $Message, $Headers);

Cuối cùng, sau khi thư đã đượcgửi đi, trình duyệt sẽ hiện lên trang web mà bạn hướng người dùng đến (lưu trongbiến $RedirectPage). Hoặc giả bạn chỉ đơn thuần muốn hiện một câu cám ơn,hãy bỏ dòng <INPUT TYPE="hidden" NAME="RedirectPage" VALUE="…"> trong tệpEZMAIL.HTM là được.

if ($RedirectPage) {

header ("Location:$RedirectPage");

} else {

echo "<CENTER><H1>Thankyou for using EZ Mail</H1>\n";

echo "<br><br>\nPowered bywww.thanhhai.com<P></CENTER>";
}

***

Trên đây là toàn bộ những gìcần thiết để bạn có thể tự tạo một form trên website của mình để nhận thông tindo người dùng điền vào. Trong hai tệp EZMAIL.HTM và EZMAIL.PHP, tôi đã cố gắngrút gọn tối đa, chỉ nêu lên những thành phần cần thiết nhất của form và các lệnhxử lý form để các bạn dễ theo dõi, nắm bắt. Các bạn hoàn toàn có thể cải tiến đểform được trình bày đẹp hơn, dùng font chữ do bạn chỉ định, tô màu cho form,hoặc gộp cả hai tệp trên vào làm một.

EZMAIL.HTM

<HTML>

<HEAD>

<TITLE>EZMail: powered by www.thanhhai.com</TITLE>

<META http-equiv="Content-Type" content="text/html; charset=UTF-8">

</HEAD>

<BODY>

<FORM ACTION="ezmail.php" METHOD="POST">

Your Name : <INPUT NAME="SenderName" TYPE="text" SIZE="35"><P>

Your Email: <INPUT NAME="SenderEmail" TYPE="text" SIZE="35"><P>

Subject : <INPUT NAME="Subject" TYPE="text" SIZE="35"><P>

Message<BR><TEXTAREA NAME="Message" ROWS="5" COLS="40"></TEXTAREA><P>

<INPUT TYPE="Submit" VALUE="Send"> <INPUT TYPE="Reset">

<INPUT TYPE="hidden" NAME="RecipientEmail" VALUE="thanhhai@thanhhai.com">

<INPUT TYPE="hidden" NAME="DefaultSubject" VALUE="Feedback from My Website">

<INPUT TYPE="hidden" NAME="RedirectPage" VALUE="http://www.thanhhai.com">

<INPUT TYPE="hidden" NAME="CcEmail" VALUE="chieuvangthu@yahoo.com">

</FORM>

</BODY>

</HTML>



EZMAIL.PHP

<?

/*

###################################

# EZMail: powered by www.thanhhai.com #

###################################

*/

if ((!$SenderEmail) || (!$Message))

{

echo ("Missing your email or message!");

exit ();

}

if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $SenderEmail))

{

echo ("Your email address is invalid");

exit ();

}

if (!$Subject)

$Subject = $DefaultSubject;

$Headers .= "From: $SenderName <$SenderEmail>\r\nReply-To: $SenderEmail";

if ($CcEmail)

$Headers .= "\r\nCc: $CcEmail";

mail ($RecipientEmail, $Subject, $Message, $Headers);

if ($RedirectPage)

{

header ("Location: $RedirectPage");

}

else

> {

echo "<CENTER><H1>Thank you for using EZ Mail</H1>\n";

echo "<br><br>\nPowered by www.thanhhai.com<P></CENTER>";

}

?>

No comments:

Post a Comment