Hôm qua chiến hữu có liên lạc nhờ fix cái vụ mail SMTP gởi thông qua tài khoản email host trên Google app, sau một hồi mò mẫm thì ra vấn đề không phải trong code triển khai của mình mà là do bug trong class phpmailer cũ, nên cách giải quyết đơn giản là download phiên bản mới (phpmailer 5.1).

Thấy cái này có lẽ nhiều đồng chí gặp nên post lên để chia sẽ những gì đã làm. Số là script gởi mail của phpmailer sử dụng SMTP thì các bạn search trên mạng cũng khá đầy, nhưng post lại đây cho bạn nào quan tâm.

Thông số chính để chạy được SMTP thì đòi hỏi tối thiểu 3 tham số là SMTP Host, SMTP Username, SMTP Password:
– SMTP Host: thì nếu nhà cung cấp dịch vụ mail nào đưa ra SMTP thì họ cũng sẽ đưa cho mình cái địa chỉ, cụ thể của bác Gmail và các mail sử dụng cơ chế Google Apps thì có địa chỉ Host là smtp.gmail.com
– SMTP Username và SMTP Password chính là account email.

Các SMTP khác sao thì không biết, nhưng đối với Google thì chúng ta phải cấu hình SSL và Port 465 để có thể authen được.
Nếu bạn nào đã quen với OOP rồi thì việc sử dụng class phpmailer khá đơn giản, nó cung cấp khá nhiều property và method cho các vấn đề của chúng ta, kể cả attachment trong mail.

Dưới đây là đoạn script gởi mail mà mình test, các bạn có thể tham khảo sơ qua cách sử dụng 1 số method và property của phpmailer class.

?Download download.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?
include "class.phpmailer.php"; 
include "class.smtp.php"; 
 
$mail = new PHPMailer();
$mail->IsSMTP(); // set mailer to use SMTP
$mail->Host = "smtp.gmail.com"; // specify main and backup server
$mail->Port = 465; // set the port to use
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPSecure = 'ssl';
$mail->Username = "username@gmail.com"; // your SMTP username or your gmail username
$mail->Password = "passwordhere"; // your SMTP password or your gmail password
$from = "fromemail@somemail.com"; // Reply to this email
$to="emailnguoinhan@domain.com"; // Recipients email ID
$name="Vo Duy Tuan"; // Recipient's name
$mail->From = $from;
$mail->FromName = "Your From Name"; // Name to indicate where the email came from when the recepient received
$mail->AddAddress($to,$name);
$mail->AddReplyTo($from,"Vo Duy Tuan");
$mail->WordWrap = 50; // set word wrap
$mail->IsHTML(true); // send as HTML
$mail->Subject = "Test mail script from bloghoctap.com";
$mail->Body = "<b>Mail nay duoc goi bang phpmailer class. - <a href='http://bloghoctap.com'>bloghoctap.com</a></b>"; //HTML Body
$mail->AltBody = "Mail nay duoc goi bang phpmailer class. - bloghoctap.com"; //Text Body
//$mail->SMTPDebug = 2;
if(!$mail->Send())
{
	echo "<h1>Loi khi goi mail: " . $mail->ErrorInfo . '</h1>';
}
else
{
	echo "<h1>Send mail thanh cong</h1>";
}
?>

Các bạn có thể download file zip dưới đây gồm 3 file (class.phpmailer.php, class.smtp.php và send.php) bỏ vào localhost, thay đổi thông tin username,password cho đúng rồi test thử xem thế nào. Chúc vui!

Download: Test Gmail SMTP with PHP Mailer (testgmail-bloghoctap.com_.zip)

———————–
LƯU Ý: Nếu script báo lỗi không connect được tới SMTP host chắc có lẽ PHP.INI chưa enable extension “extension=php_openssl.dll”, hãy bỏ dấu “;” ở trước dòng đó đi và restart lại Server là ok. Nếu vẫn không được nữa thì hãy kiểm tra account gmail xem có chính xác không, hoặc kiểm tra xem account gmail đã enable chế POP trong Setting chưa. Và lưu ý cái version của class phpmailer nhé, nên download phiên bản mới từ địa chỉ mình để ở trên từ trang http://phpmailer.worxware.com.

Bài viết liên quan:

40 Lời bình cho bài viết “phpmailer gởi mail SMTP bằng Gmail/Google Apps”

Viết lời bình



Bình luận mới nhất