Ta hãy tạo 1 chương trình PHP nhỏ đẻ gởi email như sau:
//nội dung file example1.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 ý:
- Nhớ thay to@domain.com và from@domain.com thành địa chỉ email của bạn trước khi chạy thử chương trình!
- Có thể phải mất tới 5-10 phút email mới tới nơi, và bạn nhớ kiểm tra thư mục Bulk email vì nhiều khi email gởi tới bị để trong mục Bulk.
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 $from = 'from@domain.com'; $to = 'to@domain.com'; $subject = 'Example 2: Try a simple HTML email'; $message = 'A HTML email: bold, italic, underline.'; $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: bold, italic, underline.
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 $from = 'from@domain.com'; $to = 'to@domain.com'; $subject = 'Example 3: Send HTML email'; $message = 'A HTML email: bold, italic, underline.'; $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 $from = 'from@domain.com'; $to = 'to@domain.com'; $subject = 'Example 4: Send Unicode email'; $message = 'Email tiếng Việt Unicode: in đậm, in nghiêng, gạch chân.'; $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:
- Đặt charset cho email. Charset này phải nên trùng với charset của file mã nguồn PHP và website của bạn. Trong ví dụ ở trên, ta đặt charset cho email là utf-8 thì bạn cũng phải lưu file example4.php lên đĩa với charset là utf-8. Bạn xem mục "LƯU FILE VỚI TIẾNG VIỆT UNICODE" ở bài viết Giới thiệu - Các bước chuẩn bị cần thiết để tìm hiểu thêm về lưu file mã nguồn PHP lên đĩa với charset utf-8.
- Cho dù bạn đã đặt charset đúng rồi, vẫn có thể email không hiển thị đúng tiếng Việt khi đọc! Vì quyền hiển thị email như thế nào là do chương trình email client quyết định. Nếu bạn đọc email bằng Outlook chẳng hạn, thì Outlook sẽ tự động nhận biết charset của email và hiển thị đúng tiếng Việt. Nếu bạn đọc email trên web (như Yahoo, Hotmail...) thì có thể bạn phải tự tay chọn lại Encoding là utf-8 trên trình duyệt vì các web email như Yahoo, Hotmail sẽ dùng charset mặc định của mình và bỏ qua charset được thiết lập trong email.