Tự tạo cho mình một Form Mail

                                                                                                 Thanh HẢi - www.thanhhai.com

Phần 2

Thuở mới bắt đầu tập làm web, tôi đã từng khao khát muốn làm cho được một chương trình cho phép gửi mail ngay từ trang web (hay còn gọi là form mail). Tất nhiên, dùng một liên kết <A HREF="mailto: …"> thì quá đơn giản, nhưng không chuyên nghiệp chút nào. Sau một thời gian dùng thử những form mail đặt nhờ trên các trang web miễn phí, tôi quyết định làm lấy một form mail cho mình.

Để 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 VB Script. Tôi quyết định chọn PHP vì đây là một ngôn ngữ khá mềm dẻo, dễ dùng, có thể 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 form mail là chúng ta phải có một tệp .HTM, trong đó có một form để thu thập những thô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ủa tệ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 đặt tê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ội dung 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ản chỉ có một dòng mà thôi.

Ngoài ra, còn có hai thành phầ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ẽ được hiệ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ệc xử 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án cho 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ầu củ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ường hợ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ùng sẽ chuyển đến sau khi gửi thư đi. Thông thường, đó là một trang web cám ơn người dù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 được thô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ủa khách hàng, bạn có thể lấy RecipientEmail là địa chỉ công ty và CcEmail là địa chỉ của riêng bạn.

 Trừ biến RecipientEmail là 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ại nếu thấy không cần thiết.

Lưu ý là trong PHP 3.0, khi người dùng gửi form đi thì tên các thành phần trong form tự động chuyển thành tên biến tương ứng trong tệp EZMAIL.PHP (trong PHP 4.0 trở lên thì không nhất thiết như vậy), do đó nếu bạn muốn đổi tên một thành phần trong form ở tệp EZMAIL.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ười dù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ất dễ 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ạn có thể trả lời hoặc trao đổi thêm thông tin cần thiết) và nội dung thư (vì một lá 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ác biế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ương trình:

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

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

    exit ();

}

Sau đó, ta kiểm tra xem địa chỉ 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ải có í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 address is 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ụng chủ đề mặc định:

if (!$Subject)

    $Subject = $DefaultSubject;

Để đưa thông tin về người gửi vào ngay trong thư, chúng ta sử dụng thêm một biến là $Headers. Các thông tin trong biến này sẽ hiện lên ở thanh tiêu đề của mỗi lá thư khi chúng ta xem thư 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ận 4 tham số là tên người nhận, chủ đề, nội dung thư và các thông tin bổ trợ trong biến $Headers.

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

Cuối cùng, sau khi thư đã được gử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 trong biế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ệp EZMAIL.HTM là được.

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>";

}

***

 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 tin do người dùng điền vào. Trong hai tệp EZMAIL.HTM và EZMAIL.PHP, tôi đã cố gắng rú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ệnh xử 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. Các bạn có thể gửi e-mail về thanhhai@thanhhai.com nếu muốn trao đổi sâu hơn về những vấn đề này. 

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>";

    }

?>

Phần 2


PcLeHoan 1996 - 2002
Mirror : http://www.pclehoan.com
Mirror : http://www.lehoanpc.net

Mirror : http://www.ktlehoan.com