Hướng dẫn Sử dụng PHPMailer để gửi mail

PVS

Super Moderator
Thành viên BQT
Tham gia
28/02/2015
Bài viết
17,142
Được Like
12,745
Sử dụng PHPMailer để gửi mail

Khoảng 2 tuần trở lại đây mình nhận được khá nhiều email về vấn đề gửi mail trên localhost. Vấn đề này cũng khá phổ biến, mặc định hàm mail() trên localhost không thể gửi được. Và chúng ta cũng có nhiều giải pháp cho vấn đề, nhưng mình nghĩ PHPMailer là giải pháp ổn định nhất.

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.jpg

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ờ chúng ta tiến hành khai báo để tiến hành gửi mail:
Mã:
// 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   = "[email protected]"; // Tên đăng nhập tài khoản Gmail
$mail->Password   = "*******"; //Mật khẩu của gmail
$mail->SetFrom("[email protected]", "Test Email"); // Thông tin người gửi
$mail->AddReplyTo("[email protected]","Test Reply");// Ấn định email sẽ nhận khi người dùng reply lại.
$mail->AddAddress("[email protected]", "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!";
}

Gửi mail với tập tin html
Việc gửi mail với một tập tin bằng html ở tại Gmail là hoàn toàn không thể. Tuy nhiên, PHPMailer sẽ hỗ trợ bạn gửi mail với nội dung nằm trong một tập tin html.
Để làm được thì bạn chỉ cần khai báo thay đổi $mail->MsgHTML(”);
Mã:
$mail->MsgHTML(file_get_contents('email-template.html'), dirname(__FILE__));

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


Nguồn: izwebz.com​
 

tri78

Moderator
Thành viên BQT
Tham gia
13/05/2015
Bài viết
438
Được Like
335
IP của Việt Nam đa phần bị cho vô spam :D
 

Top Bottom