Subscribe Now

Trending News

Bài viết

Lập trình, PHP

PHPMailer – Lỗi Username and Password not accepted

PHPMailer – Lỗi Username and Password not accepted

Gửi mail với PHPMailer và Lỗi Username and Password not accepted khi tạo Mail Server với Swiftmailer.

Đầu tiên mình xin giới thiệu cách gửi mail trên localhost  – trích izwebz.com

Có ba cách để có thể gửi mail trên localhost.

  • Cài thêm server mail: cách này tốn thời gian để mò, nhưng lại không sử dụng gì nhiều, vì làm trên localhost chủ yếu để test. Khi lên host thì họ đã hổ trợ sẵn hàm mail cho chúng ta rồi.
  • Cấu hình lại server để gửi mail qua SMTP: cách này cũng khá nhanh, tuy nhiên có máy làm được, có máy lại không hoạt động. Khi lên host thì chúng ta đâu được vào cấu hình server của họ. Thông thường, các host ở các nhà cung cấp của Việt Nam thì hàm mail() đều bị khóa.
  • Sử dụng thư viện PHPMailer để gửi mail thông qua SMTP: Đây có lẽ là cách hay nhất, vì chúng ta có thể gữi mail ở bất kì đâu: localhost, hay host bị khóa hàm mail().

#Giới thiệu

PHPMailer được phát triển bởi Marcus Bointon và được Worx International Inc phát hành, hiện tại có khoảng 9 triệu người dùng chính thức trên khắp thể giới. Phiên bản đầu tiên của PHPMailer được phát hành vào năm 2004, đến nay thì PHPMailer đã ra đến phiên bản 5.0 và hổ trợ PHP5.
PHPMailer là mã nguồn mở miễn phí, được phát hành theo giấy phép LGPL 2.1. Do đó, bạn nên tham khảo giấy phép này trước khi dùng.

#SMTP là gì?

SMTP được viết tắt từ cụm từ Simple Mail Transfer Protocol – Phương thức truyền tải thư điện tử đơn giản. Thông thường, khi soạn thảo email bạn phải đăng nhập vào web mail của nhà cung cấp dịch vụ. Tuy nhiên, với các dịch vụ hỗ trợ SMTP thì họ sẽ cung cấp cho chúng ta các thông số ( Incoming mail và Outgoingmail ) để chúng ta có thể gửi mail ở bất kì đâu (máy tính cá nhân, Laptop, Smartphone, tablet,…) thông qua server SMTP mà họ cung cấp.

Mail active
Mail active

Google hiện đang là nhà cung cấp mail phổ biến, ngoài ra bạn cũng có thể dùng SMTP của google để tiến hành gửi mail. Trước tiên bạn cần phải kích hoạt dịch vụ theo các bước dưới đây:
1/ Đăng nhập vào Gmail.
2/ Nhấp Cài đặt.
3/ Nhấp Chuyển tiếp và POP/IMAP
4/ Chọn Bật POP và IMAP.
5/ Lưu Thay đổi

Nếu bạn không kích hoạt chức năng này thì bạn sẽ không thể gửi mail thông qua SMTP được.

#Cách sử dụng

Trước tiên bạn cần phải download toàn bộ source code của PHPMailer tại kênh github chính thức: https://github.com/Synchro/PHPMailer

Sau đó chúng ta tiến hành giải nén ra, bạn sẽ thấy rất nhiều thư mục và tập tin. Tuy nhiên, bạn hãy chú ý đến các tập tin sau đây ngoài thư mục root: class.phpmailer.php; class.pop3.php; class.smtp.php đó là bộ thư viên chính mà chúng ta cần phải có để có thể gữi mail được.
Bây giờ ta tiến hành khai báo để tiến hành gửi mail

// Khai báo thư viên phpmailer
require "lib/class.phpmailer.php";
 
// Khai báo tạo PHPMailer
$mail = new PHPMailer();
 
//Khai báo gửi mail bằng SMTP
$mail->IsSMTP();
 
//Tắt mở kiểm tra lỗi trả về, chấp nhận các giá trị 0 1 2
// 0 = off không thông báo bất kì gì, tốt nhất nên dùng khi đã hoàn thành.
// 1 = Thông báo lỗi ở client
// 2 = Thông báo lỗi cả client và lỗi ở server
 
$mail->SMTPDebug  = 2;
$mail->Debugoutput = "html"; // Lỗi trả về hiển thị với cấu trúc HTML
$mail->Host        = "smtp.gmail.com"; //host smtp để gửi mail
$mail->Port        = 587; // cổng để gửi mail
$mail->SMTPSecure  = "tls"; //Phương thức mã hóa thư - ssl hoặc tls
$mail->SMTPAuth    = true; //Xác thực SMTP
$mail->Username    = "my_email@gmail.com"; // Tên đăng nhập tài khoản Gmail
$mail->Password    = "*******"; //Mật khẩu của gmail
$mail->SetFrom("test@gmail.com", "Test Email"); // Thông tin người gửi
$mail->AddReplyTo("no-reply@example.com","Test Reply");// Ấn định email sẽ nhận khi người dùng reply lại.
$mail->AddAddress("nguoi-nhan@gmail.com", "John Doe");//Email của người nhận
$mail->Subject = "Tiêu đề thư"; //Tiêu đề của thư
$mail->MsgHTML("lorem"); //Nội dung của bức thư.
 
 
// $mail->MsgHTML(file_get_contents("email-template.html"), dirname(__FILE__));
// Gửi thư với tập tin html
$mail->AltBody = "This is a plain-text message body";//Nội dung rút gọn hiển thị bên ngoài thư mục thư.
$mail->AddAttachment("images/attact-tui.gif");//Tập tin cần attach
 
//Tiến hành gửi email và kiểm tra lỗi
if(!$mail->Send()) {
  echo "Có lỗi khi gửi mail: " . $mail->ErrorInfo;
} else {
  echo "Đã gửi thư thành công!";
}

Contact Form là một plugin của WordPress giúp bạn tạo ra các contact form để gửi mail hoặc thu thập ý kiến người dùng. Bình thường, nếu bạn sử dụng các dịch vụ host ở Việt Nam thì sẽ xảy ra trường hợp không thể gửi được email. Nguyên nhân là do họ đã disable hàm mail() để giảm tải băng thông, và họ buộc khách hàng phải sử dụng thêm server mail của họ nữa.#Gửi mail với Contact Form 7

Trong trường hợp đó, thì plug-in Contact Form 7 sẽ không hoạt động được. Vậy giải pháp thì chúng ta sẽ sử dụng SMTP để gửi mail.
Lúc này, bạn chỉ cần cài thêm một plugin hỗ trợ cho Contact Form 7 để nó làm việc thôi, “Configure SMTP
Bạn có thể cấu hình các thông tin tương tự như trên, hoặc bạn nhấp vào dấu check “Send e-mail via Gmail” để nó tự cấu hình các thông tin cơ bản.

Tiếp theo là lỗi Username and Password not accepted.

Fatal error: Uncaught Swift_TransportException: Expected response code 250 but got code “535”, with message “535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 https://support.google.com/mail/answer/14257 ih15sm2375064pab.38 – gsmtp ” in D:\PHP\chapter22\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\AbstractSmtpTransport.php:383 Stack trace: #0 D:\PHP\chapter22\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\AbstractSmtpTransport.php(281): Swift_Transport_AbstractSmtpTransport->_assertResponseCode(‘535-5.7.8 Usern…’, Array) #1 D:\PHP\chapter22\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\EsmtpTransport.php(270): Swift_Transport_AbstractSmtpTransport->executeCommand(‘RSET\r\n’, Array, Array) #2 D:\PHP\chapter22\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\Esmtp\Auth\XOAuth2Authenticator.php(55): Swift_Transport_EsmtpTransport->executeCommand(‘RSET\r\n’, Array) #3 D:\PHP\chapter22\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\Esmtp\Auth in D:\PHP\chapter22\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\AbstractSmtpTransport.php on line 383.

Khi gặp lỗi này bạn hãy bình tĩnh. Không phải do code sai hay gì đâu. Lý do chính là tài khoản Gmail của bạn đang TẮT Cho phép ứng dụng kém an toàn

Và sau đây là cách tắt chế độ này.

1. Truy cập vào tài khoản Google của bạn

Truy cập vào tài khoản Google của bạn
Truy cập vào tài khoản Google của bạn

2.  “Đăng Nhập và Bào Mật”

Đăng Nhập và Bào Mật
Đăng Nhập và Bào Mật

3.  “Ứng dụng và trang web đã kết nối” kéo xuống dưới cùng và BẬT chế độ Cho phép ứng dụng kém an toàn

Ứng dụng và trang web đã kết nối
Ứng dụng và trang web đã kết nối

Bây giờ chỉ hãy refresh lại trang của bạn và xem kết quả.

Chúc các bạn thành công!

Bài viết liên quan

Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận