phpmailer gởi mail SMTP bằng Gmail/Google Apps
Đăng trong danh mục PHP, Web Programming bởi admin | Tags: bug, fsockopen, gmail, google app, openssl, phpmailer, smtp, ssl

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.
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
- Chuẩn bị gì để thi chứng chỉ Zend PHP5 ZCE?
"Huynh cho em hỏi, cái chứng chỉ trên W3school thì có tốt không và VN c" - Kiến Hâu - Harveynash - 2 tháng quân trường
"Đọc cái bài này của Tuấn lâu rồi. Không ngờ bây giờ mình làm vào làm c" - Dung - Harveynash - 2 tháng quân trường
"A.Tuấn ơi, ngày mai em có buổi phỏng vấn ở Harvey Nash, vị trí nv tư v" - Sherry Ng - Cài đặt Web Server cho Amazon EC2 Instance [Video Clip]
"rất đầy đủ cảm ơn nhé .. thích nhất là cái Video dễ hiểu" - Truyen cuoi hay - Cài đặt Web Server cho Amazon EC2 Instance [Video Clip]
"Bài viết chi tiết. Và EC2 có phải là giải pháp cho doanh nghiệp vừa và" - Hieu Doan - Cài đặt Web Server cho Amazon EC2 Instance [Video Clip]
"Bài viết rất chi tiết :)" - Nguyen Hoang Viet - SQLite với PDO và PHP
"Chào anh. Xin anh cho em hỏi nếu em có 1 file .sqlite rồi, em muốn add" - Nguyễn Văn Nghĩa - phpmailer gởi mail SMTP bằng Gmail/Google Apps
"Mình gửi mail với nội dụng bằng ckeditor có chèn hình ảnh. khi luôn x" - Minh Tiến - phpmailer gởi mail SMTP bằng Gmail/Google Apps
"Cảm ơn bác rất nhiều về bài viết :))" - Lê Trường Giang - APC và Segmentation Fault
"Bác này giống mình quá, Mình cũng vừa mua 1 em VPS, cài APC cũng cái l" - Phan Nam Thắng
Danh mục
- android (3)
- Business (25)
- Flash (1)
- Graphic Design (16)
- IT Guys (1)
- Javascript (9)
- Miscellaneous (58)
- Photography (9)
- PHP (43)
- Review sách (13)
- Search Engine Optimization (2)
- security (3)
- software (5)
- User Interface Design & Usability (8)
- Web Design (28)
- Web Programming (52)
Lưu trữ
- September 2012 (1)
- May 2012 (2)
- March 2012 (2)
- February 2012 (1)
- January 2012 (1)
- December 2011 (1)
- November 2011 (2)
- September 2011 (2)
- August 2011 (1)
- July 2011 (4)
- June 2011 (2)
- May 2011 (2)
- April 2011 (2)
- March 2011 (2)
- February 2011 (2)
- January 2011 (4)
- December 2010 (6)
- November 2010 (3)
- October 2010 (3)
- September 2010 (5)
- August 2010 (6)
- July 2010 (5)
- June 2010 (2)
- May 2010 (5)
- April 2010 (7)
- March 2010 (8)
- February 2010 (4)
- January 2010 (10)
- December 2009 (12)
- November 2009 (12)
- October 2009 (15)
- September 2009 (16)
- August 2009 (11)
- July 2009 (15)
- November 2008 (1)
- October 2008 (1)
- September 2008 (3)


May 31, 2010 at 3:05 pm
Chào anh, rất cảm ơn vì bài viết của anh, e rất thích blog của anh.
Sẵn đây a có thể chỉ e làm sao để trình bày code trong bài viết giống như a vậy đó, nhìn rất hay. E cũng đang tập tành làm 1 blog, nếu được a giúp đỡ thì rất may ^^. Nếu được thì a có thể cho nick yahoo để e add hợac add nick YH e nha. khoatd21.
THanks..
[Reply]
June 9, 2010 at 10:24 pm
Chào anh admin, em vừa thực hiện y chang bài viết của anh và đã gửi mail thành công. Nhưng bị một chút rắc rối, là thế này:
domain của em là abc.com, em đã tạo tài khoản google app và tạo tài khoản mail là xxx@abc.com, thì khi gửi mail vào xxx@abc.com, mail nó ko vào hòm mail của google, mà nó đi thẳng vào webmail của cpanel, giờ em muốn nó vào hòm mail của google thì mình cấu hình thế nào ạ, mong anh giúp cho
[Reply]
Lê Hậu Reply:
March 12th, 2011 at 5:16 am
@Chin Lee,
cpanel quản lý hosting mà. bạn thử xem lại phần MX trong domain xem nó trỏ về MDA nào. ah, anh Tuấn xóa dùm em phần comment ở dưới nha.
[Reply]
October 14, 2010 at 11:51 pm
Thanks, bài viết hay đáy, làm hoài vụ này ko duoc.
mail() trong php ko giải quyết duoc.
[Reply]
October 16, 2010 at 4:28 pm
Thân chào bạn!
Mình đã nghiên cứu send mail by php hơn 1 tuần rồi mà không được. Tìm thấy bài của bạn mình như nắng hạn gặp mưa. Nhưng mình đang gặp một vài vấn đề xin bạn test lại giúp mình tí nha:
- Khi $mail->SMTPSecure = ‘ssl’; => SMTP Error: Could not connect to SMTP host.
- Khi // $mail->SMTPSecure = ‘ssl’; =>SMTP Error: Could not authenticate.
Mình cần gấp lắm! Xin cảm ơn bạn rất nhiều!
[Reply]
admin Reply:
October 16th, 2010 at 4:32 pm
Kiểm tra lại SMTP server có hỗ trợ SSL không và kiểm tra port. Nếu Gmail SMTP thì những cấu hình trên là chạy được (tất nhiên là phải enable SMTP cho account gmail). Tùy cơ ứng biến. Save yourself!
[Reply]
October 16, 2010 at 4:54 pm
Thân chào bạn!
Yeah!!!! Do xampp chưa enable ssl! Cảm ơn bạn rất nhiều. Mình vui lắm! Không biết phải tả như thế nào!
Nếu bạn ở SG thì hôm nào đi nhậu một bửa đi! Ok?
Best regard,
[Reply]
admin Reply:
October 16th, 2010 at 5:37 pm
Hihi, chắc không coi phần LƯU Ý nhỉ
. Dù sao cũng là một bài học. Mình cũng từng bị như vậy nên lưu ý đó. Mình ở SG, nhậu thì không dám, rảnh rỗi thì cafe tán dốc PHP cũng được. Rất vui được làm quen!
[Reply]
October 16, 2010 at 5:50 pm
Thân chào bạn Duy Tuấn!
Quả thật “kinh nghiệm” có giá trị vô cùng
) Ok!
Sắp tới mình sẽ call mời bạn cafe.
Có! Mình có xem kỹ lắm đó chứ! Nhưng ai ngờ là cái ssl
Yaoo: anhtungo19.. Hãy Buzz mình cái nha! Mình cũng rất vui được làm quen với bạn!
See you soon,
[Reply]
November 23, 2010 at 2:01 pm
Nó báo vầy là sao vậy bạn? fix hoài không được
“Loi khi goi mail: The following From address failed: Mymail@gmail.com“
[Reply]
admin Reply:
November 23rd, 2010 at 2:06 pm
Nó báo vậy chắc là do địa chỉ email của bạn sai kìa. From address fail đó. Tốt nhất là nhập các thông số cho đúng trước khi gởi email.
[Reply]
January 20, 2011 at 10:50 am
admin ơi xem hộ mình tại sao mình gửi mail ở dưới localhost thì được. Còn khi up lên mạng nó lại báo “Could not connect to SMTP host.” Trong khi giao thức ssl ở trên host cũng đã được enable. Mình có cần thay đổi thông số gì khi up lên host không bạn
[Reply]
January 29, 2011 at 12:01 am
Chào anh em đã cấu hình như send mail ko dc , anh có thể nói rõ từng bước dc ko ..Em đuối quá rùi hic.Thanks
[Reply]
admin Reply:
January 31st, 2011 at 9:21 am
Mình viết như vậy quá rõ ràng rồi. Hãy thử từng bước và làm lại. Một số điểm cần xem xét là cái tài khoản SMTP có hoạt động không, vì cấu hình cái send mail này copy vô là chạy thôi. Với lại coi cái chỗ ghi chú để enable cái ssl. Thân.
[Reply]
February 1, 2011 at 7:41 pm
Chào bạn!
Bạn cho mình hỏi: Mình làm theo bạn và đã gửi mail thành công.
Tuy nhiên, khi người nhận nhấn “Trả lời” thì địa chỉ trong hộp “To:” lại là địa chỉ của người mình đã gửi mail đến.
Bạn kiểm tra dùm mình nha!
[Reply]
admin Reply:
February 7th, 2011 at 5:00 pm
Tự tìm hiểu thêm lib đó đi bạn. Cái gì tự mày mò cũng có cái hay của nó.
[Reply]
April 13, 2011 at 2:50 pm
BẠn ơi, dùng php chay thì mình dùng được rồi, còn nếu dùng cakkephp thì dùng ntn? hả bạn, tại mình đang học cakephp, Bạn có thể chỉ sớm giúp mình được không, mình đang cần gấp lắm
[Reply]
admin Reply:
April 14th, 2011 at 11:08 am
Hihi, bạn tự nghiên cứu để nhúng vô code đi, không thôi copy y chang vô cái chỗ nào xử lý gởi mail là nó chạy thôi. Good luck!
[Reply]
April 20, 2011 at 9:16 am
admin cho mình hỏi, mình dùng code của bạn gửi trên host Godaddy không được. Nó báo là “SMTP Error: Could not connect to SMTP host.”
[Reply]
admin Reply:
April 20th, 2011 at 10:12 am
Bạn coi thêm phần LƯU Ý cuối bài viết để thử tìm nguyên nhân hoặc liên hệ trực tiếp với godaddy để họ hỗ trợ. Ngoài ra, có thể do tài khoản gmail của bạn chưa được cấu hình để sử dụng SMTP vì mặc định chưa dùng được liền đâu, vào setting của gmail bật lên mới được. Google thêm nhé.
[Reply]
April 29, 2011 at 12:39 am
Admin oi minh muon hoi 1 chut la 3 file tai ve de test gui mail thi minh day vao localhost (minh dung XAMPP) hay minh up len host a,vi minh up 3 file nay len host de chay thu thi no bao ko ket noi duoc smtp host,minh cung ko biet chinh php.ini o dau vi minh tren host cua minh ko thay co file nay,thanks Admin
[Reply]
admin Reply:
April 29th, 2011 at 12:42 am
Bạn xem thêm phần ghi chú để biết cần cấu hình cái gì. 99% trường hợp gởi mail không thành công là do tài khoản SMTP không hợp lệ vì các config kia hầu như được bật sẵn. Còn làm sao để biết SMTP có run không thì thử add email đó vào Outlook (hoặc Thunderbird) để biết có được hay không, nếu Outlook không kết nối được nghĩa là acc SMTP có vấn đề.
[Reply]
June 29, 2011 at 9:41 am
Cám ơn bạn nhiều. Mình làm theo bạn ok hết.
Tuy nhiên khi nhận mail thì bị lỗi font unicode.
Mình chưa fix được. Bạn biết chỉ mình với nghen.
Thanks
[Reply]
July 27, 2011 at 8:32 pm
Cám ơn bạn. Bài viết của bạn rất hay.
[Reply]
August 26, 2011 at 2:53 pm
sao toàn thế này vậy?
“Warning: mail() [function.mail]: Failed to connect to mailserver at “localhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in C:\wamp\www\PHP\dangky.php on line 63″
chán quá. mà cái code đó thì đặt ở chỗ nào vậy?
[Reply]
September 7, 2011 at 3:21 pm
Thannk bạn nhiều lắm, mình làm mãi mà không được, nhờ có hướng dẫn của bạn mình đã làm được rồi,hjhj, thank thnak thank bạn.
[Reply]
September 17, 2011 at 8:49 am
Thân chào !
chân thành cám ơn anh vì đã post bài này, rất hữu ích, qua máy ngày nghiên cứu và chỉnh sửa tôi ko gửi mail được, từ khi vô tình tìm được bài viết này và làm theo hướng dẫn thì đã ok! chân thành cám ơn !!!!!
[Reply]
December 17, 2011 at 10:52 am
Cảm ơn bạn, mình đã thử send mail được rồi. Nhưng mình muốn cái subject hiển thị được tiếng việt unicode thôi thì phải cấu hình như thế nào?
BS Phạm Thị Vân Thanh
My Blog
[Reply]
January 5, 2012 at 4:38 pm
Chào anh Tuấn, tut của anh em đã đọc, cảm ơn anh đã chia sẻ. Tuy nhiên khi test em gặp trường hợp như sau :
$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
Theo em hiểu là from là biến chứa địa chỉ nếu ta reply, nhưng khi nhấn relpy thì lại gửi đến chính địa chỉ mà ta dùng để gửi
Làm cách nào để reply là nó gửi về địa chỉ mà chứa trong biến $from được không anh
Thanks anh
[Reply]
January 31, 2012 at 3:08 pm
mình muốn đính kèm theo tập tin thì sao nhỉ
[Reply]
April 18, 2012 at 3:59 pm
THank bạn mình đang cần code này !
[Reply]
May 20, 2012 at 3:05 am
SMTP Error: Could not connect to SMTP host.
(
mình đã làm đủ cách như enable extension “extension=php_openssl.dll”…bật xampp thì thấy SMTP Service đã activated…nhưng vẫn bị lỗi như trên hoài.bạn có cách nào giúp mình k
[Reply]
May 20, 2012 at 11:38 am
@trung, nếu vậy thì thử test account SMTP bằng một số phần mềm đọc mail hỗ trợ SMTP như Thunderbird hoặc Outloook coi có connect được vào SMTP server không. Có thể do SMTP account có vấn đề hoặc setup thông tin connect không đúng rồi.
[Reply]
May 29, 2012 at 11:17 am
Ok, thank you.
Tuy nhiên cho mình hỏi 1 vấn đề nhỏ. Nếu gửi mail có attacth file thì không được thì phải.
Gửi bằng mail của host thì được, nhưng khi mình sử dụng gửi bằng gmail thì ko thể attact file từ host của mình.
Any ideas?
[Reply]
August 2, 2012 at 4:58 pm
Cùng thắc mắc với bạn Trần Đình Trọng, người nhận sẽ thấy địa chỉ gmail của mình chứ không phải địa chỉ trong $from.Có cách nào thay đổi không anh?
[Reply]
August 17, 2012 at 5:28 pm
Hi bạn, Giúp mình tý nha. Mình có làm như bạn, (có tải file demo về chạy) mà sao cứ báo lỗi là SMTP Error: Could not connect to SMTP host.
mình cho chạy trên server và trên localhost nó cũng báo lỗi như vậy. Chạy trên localhost mình cũng đã chỉnh file php.ini rồi.
Giờ phải làm sao đây, bạn giúp mình với.
Mình cám ơn.
[Reply]
August 20, 2012 at 10:38 am
Chào bạn.
Cho mình hỏi, cái này chỉ gửi được port 465 hay có thể gửi được các port khác. Với lại cho mình hỏi tốc độ port nào là nhanh nhất, vì mình cần gửi nhiều Email một lần.
Mình cám ơn.
[Reply]
August 29, 2012 at 3:06 pm
Hi anh em muốn sửa code nội dung mail được gửi đi trong mantis. vì khi nào gửi mail đi cùng có gạch ========================= rất dài và xấu. em muốn bỏ nó đi mà tìm mãi ko biết nằm trong file nào để sửa. giúp em với ạ
[Reply]
September 17, 2012 at 8:28 am
Cảm ơn bác rất nhiều về bài viết
)
[Reply]
September 27, 2012 at 2:18 pm
Mình gửi mail với nội dụng bằng ckeditor có chèn hình ảnh.
khi luôn xuống csdl thì có hình nhưng khi gửi mail nhận được thì không có hình.
Mong mọi người giúp đỡ
[Reply]