Code Gửi email trong PHP
Sử dụng hàm mail() để gửi email trong lập trinh PHP, hàm mail sử dụng dịch vụ sendmail của server để chuyển email, hướng dẫn gửi mail với nội dung HTML và có file đính kèm
PHP cung cấp sẵn một hàm tên email được dùng để gửi email đi. Hàm này truy cập chương trình sendmail trong hệ điều hành linux. (Hãy xem sendmail – exim). Do vậy, để dùng được hàm mail cần đảm bảo Server của bạn có dịch vụ sendmail cài đặt chính xác.
Gửi mail trong PHP với hàm mail()
Hàm mail() dùng để gửi email, cú pháp gửi mail như sau:
mail($to ,$subject ,$message, [$headers], [$parameters]);
Trong đó:
- $to : địa chỉ nhận mail, một hoặc nhiều địa chỉ cách nhau bởi , (mail1@example.com,mail2@example.com)
- $subject : Tiêu đề của mail
- $message : Nội dung mail
- $headers : Tùy chọn này có hoặc không, mở rộng cho phần header của mail ví dụ From, Cc, Bcc, tham số này cách nhau bởi cặp ký tự \r\n
- $parameters : tùy chọn, nếu có nó thiết lập tham số bổ sung cho trình gửi mail (sendmail của Server)
Nếu mail gửi đi thành công, hàm trả về true
. Thành công ở đây có nghĩa là sendmail đã chấp nhận đưa mail vào hàng đợi để chuyển đi, không có nghĩa mail thực tế đã chuyển cho địa chỉ nhận.
Ví dụ sau gửi đi một email từ địa chỉ myemail@example.com
đến địa chỉ abc@example.com
đồng thời CC đến other@example.com
$to = "abc@example.com"; $subject = "Tiêu đề email"; $message = "Nội dung email"; $header = "From:myemail@exmaple.com \r\n"; $header .= "Cc:other@exmaple.com \r\n"; $success = mail ($to,$subject,$message,$header); if( $success == true ) { echo "Đã gửi mail thành công..."; } else { echo "Không gửi đi được..."; }
Gửi HTML trong mail
Nếu trong $message
gửi đi bạn có trình bày HTML thì để trình đọc email hiểu đó là HTML bạn cần một số thiết lập. Đó là mô tả trong $head
các thông số như phiên bản của Mime
, kiểu nội dung, mã hóa ký tự (UTF-8 …)
Trở lại ví dụ trên, thiết lập thêm thông số để gửi đi nội dung HTML
$to = "abc@example.com"; $subject = "Tiêu đề email"; $message = "<h1>Đây là Email có chứa HTML</h1> <p>Đoạn văn trong Email</p>"; //MỚI $header = "From:myemail@exmaple.com \r\n"; $header .= "Cc:other@exmaple.com \r\n"; $header .= "MIME-Version: 1.0\r\n"; //MỚI $header .= "Content-type: text/html\r\n"; //MỚI $success = mail ($to,$subject,$message,$header); if( $success == true ) { echo "Đã gửi mail thành công..."; } else { echo "Không gửi đi được..."; }
Gửi đính kèm trong mail
Để gửi đính kèm thì phần $header
cần thiết lập Content-type
là multipart/mixed.
Lúc này phần header của email cần mô tả có các vùng, mỗi vùng tương ứng với một nội dung (như vùng cho nội dung email, vùng cho đính kèm).
Định nghĩa vùng trong phần header: Đầu tiên cần có một chuỗi ký tự dài 32 (ví dụ $num
có thể tạo ra bằng hàm md5(time());
), mỗi vùng bắt đầu bằng thêm ký hiệu --
vào trước $num
và khi kết thúc tất cả các phân đoạn dùng --$num--
để kết thúc. Cũng lưu ý thường mã hóa dữ liệu theo base64_encode()
và nội dung dài được chia nhỏ thành nhiều dòng bằng hàm chunk_split
.
Thực hành diễn giải chi tiết theo ví dụ sau, gửi mail có đính kèm file /home/text.txt:
$to = "xyz@somedomain.com"; $subject = "Gửi email có đính kèm file"; $message = "Đây là nội dung email."; //Mở file để đọc nội dung $file = fopen( "/home/text.txt", "r" ); if( $file == false ) { echo "Error in opening file"; exit(); } $size = filesize("/home/text.txt"); $content = fread( $file, $size); //Nội dung file //Mã hóa nội dung đính kèm - chia nhỏ nội dung thành nhiều dong $encoded_content = chunk_split( base64_encode($content)); //Tạo ra một chuỗi 32 dùng đề phân vùng mô tả $num = md5( time() ); //Phần header chính $header = "From:xyz@somedomain.com\r\n"; $header .= "MIME-Version: 1.0\r\n"; $header .= "Content-Type: multipart/mixed; "; $header .= "boundary=$num\r\n"; $header .= "--$num\r\n"; //Phần nội dùng Email $header .= "Content-Type: text/plain\r\n"; $header .= "Content-Transfer-Encoding:8bit\r\n\n"; $header .= "$message\r\n"; $header .= "--$num\r\n"; //Phần nội dung đính kèm $header .= "Content-Type: multipart/mixed; "; $header .= "name=\"test.txt\"\r\n"; $header .= "Content-Transfer-Encoding:base64\r\n"; $header .= "Content-Disposition:attachment; "; $header .= "filename=\"text.txt\"\r\n\n"; $header .= "$encoded_content\r\n"; $header .= "--$num--"; //Kết thúc các phân đoạn //Gửi mail $success = mail ($to,$subject,$message,$header); if( $success == true ) { echo "Đã gửi mail thành công..."; } else { echo "Không gửi đi được..."; } ?>
Trên đây là bạn sử dụng trực tiếp hàm mail()
của PHP để gửi email, bạn cần thiết lập PHP từ php.ini
để đảm bảo hàm mail() có hoạt động. Ngoài ra nhiều thư viện, framework đã trừu tượng hóa cách gửi mail(), giúp cho việc gửi email được dễ dàng hơn bạn có thể dùng như: PHPMailer – Zend Mail. Những chương trình này cũng hỗ trợ SMTP, để bạn có thể sử dụng dịch vụ email từ bên ngoài (như gmail) thay vì dùng sendmail mặc định của server.
Mọi chi tiết quý khách vui lòng liên hệ:
THIẾT KẾ WEB NINH BÌNH
Địa chỉ: P.Nam Thành, TP.Ninh Bình, Ninh Bình;
Điện thoại: 0966.25.66.26 (Zalo);
Website: http://nbpage.com;
Rất hân hạnh được tư vấn MIỄN PHÍ tới quý khách hàng!