10/10/2018, 11:20
[TUT] PHP - Gửi email định dạng HTML có attachment
Hi all,
Vấn đề chung của khá nhiều lập trình viên PHP là làm sao send email HTML và có attachment (đính kèm) cộng với BCC, header và vân vân.
Richard Heyes viết ra công cụ rất hữu ích sau:
http://www.phpguru.org/static/mime.mail.html
Bài này viết dựa trên HTMLMimeMail5, tuy nhiên vẫn có bản tương thích PHP4 trên site đó.
Cách sử dụng của nó khá đơn giản:
Chúc send mail vui vẻ. Đừng dùng nó để spam nhé.
Thân mến.
Vấn đề chung của khá nhiều lập trình viên PHP là làm sao send email HTML và có attachment (đính kèm) cộng với BCC, header và vân vân.
Richard Heyes viết ra công cụ rất hữu ích sau:
http://www.phpguru.org/static/mime.mail.html
Bài này viết dựa trên HTMLMimeMail5, tuy nhiên vẫn có bản tương thích PHP4 trên site đó.
Cách sử dụng của nó khá đơn giản:
Code:
<?php /** ) o------------------------------------------------------------------------------o * | This is HTMLMimeMail5. It is dual licensed as GPL and a commercial license. | * | If you use the code commercially (or if you don't want to be restricted by | * | the GPL license), you will need the commercial license. It's only £49 (GBP - | * | roughly $98 depending on the exchange rate) and helps me out a lot. Thanks. | * o------------------------------------------------------------------------------o * * © Copyright 2005 Richard Heyes * Introduce to ddth by tiendx2002@gmail.com */ //Include mail lib require_once('htmlMimeMail5.php'); //Init - Khởi tạo $mail = new htmlMimeMail5(); //Set the from address - đặt địa chỉ gửi tới $mail->setFrom('Richard <richard@example.com>'); //Set the subject - đặt tiêu đề $mail->setSubject('Test email'); //Set high priority - xác định độ ưu tiên (optional) $mail->setPriority('high'); //Set the text of the Email - text thường cho những mail client không đọc được HTML $mail->setText('Sample text'); //Set the HTML of the email - phần HTML của email $mail->setHTML('<b>Sample HTML</b> <img src="background.gif">'); //Add an embedded image - gửi kèm ảnh (làm ảnh nền) (optional) $mail->addEmbeddedImage(new fileEmbeddedImage('background.gif')); //Add an attachment - file đính kèm, lưu tâm phải có file này tồn tại rồi* (optional) $mail->addAttachment(new fileAttachment('example.zip')); //Set BCC - người nhận ẩn (optional) $mail->setBcc('test@gmail.com, info@example.com'); //Send the email $mail->send(array('richard@example.com')); ?>
Thân mến.
Bài liên quan
có cần chỉnh trong file php.ini ko?
Xin mọi người chỉ giúp...
Bạn tham khảo:
PHP - Gửi email từ localhost bằng Mecury Mail
Thân mến.
Ai có thể config mẫu 1 cái = gmail d kô a !
Thân.
Để khắc phục, bạn có thể dùng SMTP (trong file class htmlMimeMail5.php có sẵn phần khai báo dùng SMTP)
$message = "Written by <b>xx3004</b>";
$subject = "Mail với nhiều file đính kèm";
$to = "xx3004@gmail.com";
$from = "xx3004@gmail.com";
$replyTo = "xx3004@gmail.com";
$contentType = "text/html";
$charset = "UTF-8";
$files = array("attachment1.zip", "attachment2.txt", "attachment3.jpg");
//Kiểm tra chắc rằng e-mail hợp lệ
$field = filter_var($to, FILTER_SANITIZE_EMAIL);
if (!filter_var($field, FILTER_VALIDATE_EMAIL)) die("Invalid recipient");
$mailHeader = "From: $from\r\n";
$mailHeader .= "Cc: $cc\r\n";
$mailHeader .= "Bcc: $bcc\r\n";
$mailHeader .= "Reply-To: $replyTo\r\n";
$mailHeader .= "MIME-Version: 1.0\r\n";
//Cái này cần để gửi attachment
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$mailHeader .= "Content-Type: multipart/mixed;\r\n" ." boundary=\"{$mime_boundary}\"";
$message = "--{$mime_boundary}\r\n" ."Content-Type: $contentType; charset = $charset\r\n" ."Content-Transfer-Encoding: 7bit\r\n" .$message ."\r\n";
$message .= "--{$mime_boundary}\r\n";
//Bắt đầu quét file để đính kèm
for ($i=0; $i < sizeof($files); $i++) {
$fHandle = fopen($files***91;$i***93;, "rb");
$data = fread($fHandle, filesize($files***91;$i***93;));
fclose($fHandle);
$data = chunk_split(base64_encode($data));
$message .= "Content-Type: {\"application/octet-stream\"};\n";
$message .= " name=\"$files***91;$i***93;\"\r\n";
$message .= "Content-Disposition: attachment;\r\n";
$message .= " filename=\"$files***91;$i***93;\"\r\n";
$message .= "Content-Transfer-Encoding: base64\r\n" . $data . "\r\n";
$message .= "--{$mime_boundary}\r\n";
}
$ok = mail($to, $subject, $message, $mailHeader);
if ($ok) die(true); else die(false);
Thân.
[x]