| Diễn Đàn Tin Học | Tutorial Room |
HÀM MAIL() CỦA PHP
Send email trong PHP rất đơn giản, ta chỉ cần dùng duy nhất 1 hàm mail() được PHP cung cấp sẵn là đủ. Cú pháp của hàm mail() như sau:
bool mail(string to, string subject, string message[, string additional_headers])
Các tham số của hàm mail() có ý nghĩa như sau:
'user@domain.com''user1@domain.com, user2@domain.com''User Name <user@example.com>''User Name 1 <user1@example.com>, User Name 2 <user2@example.com>''User Name 1 <user@example.com>, user2@domain.com, User Name 3 <user3@example.com>'Hàm mail() sẽ trả về giá trị TRUE nếu như email được chấp nhận gởi đi và FALSE trong trường hợp ngược lại.
Lưu ý: Hàm mail() trả về giá trị TRUE không có nghĩa là email sẽ được gởi đến nơi nhận thành công. Giá trị TRUE được trả về chỉ có ý nghĩa là email được server chấp nhận gởi đi, còn khi nào thì email thực sự được gởi, gởi có tới nơi hay không thì chương trình không biết được (như vậy nếu bạn nhập sau địa chỉ người nhận ở tham số To thì sẽ không có cách nào chương trình biết được địa chỉ To có đúng hoặc tồn tại hay không!).
MỘT VÍ DỤ GỞI EMAIL VỚI HÀM MAIL()
Ta hãy tạo 1 chương trình PHP nhỏ đẻ gởi email như sau:
//nội dung file example1.php <?php $from = 'from@domain.com'; $to = 'to@domain.com'; $subject = 'Example 1: Send simple text email'; $message = 'A plain text email.'; $header = "From: $from\r\nReply-to: $from"; if ( mail($to, $subject, $message, $header) ) { echo "Email sent to $to!"; } else { echo "Error occured while sending email to $to!"; } //end if ?>
Lưu chương trình vào file example1.php và chạy thử. Nếu quá trình gởi email thành công, bạn sẽ nhận được câu thông báo "Email sent to to@domain.com!", nếu có lỗi bạn sẽ nhận được câu thông báo "Error occured while sending email to to@domain.com!"
Lưu ý:
Trong cú pháp của hàm mail(), tham số additional_headers là tuỳ chọn, tức là bỏ qua cũng được. Tuy nhiên, trên thực tế bạn nên cung cấp tham số additional_headers cho hàm mail() với ít nhất 2 header From và Reply-to. Lý do thì có nhiều, một trong số các lý do phải cung cấp header From và Reply-to là vì nếu phần địa chỉ người gởi (From) là rỗng, các chương trình lọc email có thể cho rằng đây là emai spam và thế là email được tự động chuyển sang "Thùng rác"!.
GỞI HTML EMAIL VỚI HÀM MAIL()
Chúng ta đã gởi được email text với hàm mail(), nhưng nhiều lúc ta cần "trang điểm" màu mè cho nội dung email được bắt mắt hơn. Thử viết 1 chương trình nhỏ gởi email HTML:
//nội dung file example2.php <?php $from = 'from@domain.com'; $to = 'to@domain.com'; $subject = 'Example 2: Try a simple HTML email'; $message = 'A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.'; $header = "From: $from\r\nReply-to: $from"; if ( mail($to, $subject, $message, $header) ) { echo "Email sent to $to!"; } else { echo "Error occured while sending email to $to!"; } //end if ?>
Lưu chương trình vào file example2.php và chạy thử. Email gởi thành công, tới nơi an toàn, nhưng khi mở ra xem thì nội dung email lại như vầy:
A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.
Thế có tức không?
Thực ra bạn chỉ cần sửa lại chương trình "1 chút xíu" là đâu vào đấy ngay:
//nội dung file example3.php <?php $from = 'from@domain.com'; $to = 'to@domain.com'; $subject = 'Example 3: Send HTML email'; $message = 'A HTML email: <b>bold</b>, <i>italic</i>, <u>underline</u>.'; $header = "Content-type: text/html\r\nFrom: $from\r\nReply-to: $from"; if ( mail($to, $subject, $message, $header) ) { echo "Email sent to $to!"; } else { echo "Error occured while sending email to $to!"; } //end if ?>
Lưu chương trình vào file example3.php và chạy thử. Lần này thì nội dung email nhận được như mong muốn:
A HTML email: bold, italic, underline..
Như vậy bạn sẽ nhận thấy rằng gởi HTML email cũng đơn giản không khác gì gởi text email thông thường. Chỉ cần thêm 1 header Content-type: text/html là nội dung email sẽ được hiểu là HTML ngay.
Lưu ý: Riêng phần tiêu đề (subject) của email vẫn phải là text thông thường! Bạn không thể sử dụng mã HTML trong phần tiêu đề (subject) của email được. Vì thực chất phần tiêu đề của email cũng là 1 header đặt biệc chứ không nằm trong phần nội dung chính của email.
GỞI EMAIL VỚI TIẾNG VIỆT UNICODE
Gởi email tiếng Việt Unicode cũng y chang như gởi email HTML vì bản thân HTML đã hỗ trợ Unicode rồi, ta chỉ cần chú ý đặt charset của email cho đúng là được:
//nội dung file example3.php <?php $from = 'from@domain.com'; $to = 'to@domain.com'; $subject = 'Example 4: Send Unicode email'; $message = 'Email tiếng Việt Unicode: <b>in đậm</b>, <i>in nghiêng</i>, <u>gạch chân</u>.'; $header = "Content-type: text/html; charset=utf-8\r\nFrom: $from\r\nReply-to: $from"; if ( mail($to, $subject, $message, $header) ) { echo "Email sent to $to!"; } else { echo "Error occured while sending email to $to!"; } //end if ?>
Lưu chương trình vào file example4.php và chạy thử: email gởi thành công, tới nơi an toàn và khi đọc thì hiển thị...tiếng Ả-rập!!! Có gì sai ở đây chăng?
Thực ra không có gì phải lo lắng cả. Khi gởi email tiếng Việt Unicode bạn cần chú ý một số điểm sau:
MỘT SỐ LỖI HAY GẶP VỚI HÀM MAIL()
Email gởi không tới nơi
Hàm mail() trả về giá trị TRUE, địa chỉ đúng, nội dung đúng, nói chung mọi thứ đều đúng nhưng email chờ hoài không thấy tới! Kiểm tra Bulk email cũng không thấy luôn! Lỗi ở đâu hè? Nguyên nhân có thể xảy ra ở 3 chỗ:
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/local/secretbin/sendmail -t -i[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 25;Nội dung email bị đứt đoạn
Nếu bạn nhận được email nhưng nội dung bị đứt đoạn không đầy đủ thì có thể do 2 nguyên nhân sau:
<b>in đậm</b><b in đậm</b>$message = str_replace("\n.", "\n..", $message);
CÁC HÀM PHP ĐƯỢC DÙNG TRONG VÍ DỤ
TÀI LIỆU THAM KHẢO
(C) Diendantinhoc.net. All rights reserved.
Nếu bạn phát hiện lỗi, hoặc góp ý về bài viết, xin hãy gởi email về Nguyễn Bá Thành <btnguyen2k@yahoo.com>
lược xem "Tự học PHP qua ví dụ".