Php Mailer là một thư viện giúp chúng ta có thể gửi email đến người dùng trên website một cách dễ dàng, tỉ lệ thành công cao. Nếu bạn đang muốn gửi mail khi người dùng đăng ký tài khoản, kích hoạt tài khoản, xác nhận đơn hàng, liên hệ thì đây là một công cụ rất tuyệt vời, tôi sẽ gửi đến bạn ngay bây giờ.
Trên thực tế trong Php có hàm mail()
để gửi mail tuy nhiên nó thường bị bị chặn bởi các đơn vị cung cấp server vì email được gửi đi thường vào hòm spam và không mang lại kết quả như mong muốn.
Chính vì vậy Php Mailer đó là một giải pháp cứu cánh vô cùng hiệu quả, với một số ưu điểm như sau:
Tại sao cần gửi email bằng PhpMailer
- Là thư viện gửi email phổ biến nhất của php
- Tỉ lệ email gửi đi thành công đến được với hòm inbox của người dùng cao, tỉ lệ email vào spam rất ít.
- Email gửi với tốc độ nhanh, sau vài giây là xong
- Nội dung email có thể định dạng hiển thị như mong muốn bằng html
- Có thể gửi đến nhiều người cùng một lúc CC/BCC
- Có thể cấu hình người nhận email phản hồi
Các bước sử dụng PhpMailer
Bước 1: Download PhpMailer
Bạn download ngay tại đây: https://github.com/PHPMailer/PHPMailer
Bước 2: Khai báo thư viện vào file gửi mail
Bên dưới là cấu trúc file thư mục chúng ta gửi email
sendmail.php
PHPMailer
|-- src
| |-- Exception.php
| |-- PHPMailer.php
| |-- SMTP.php
Trong đó:
- sendmail.php là file dùng để gọi hàm gửi mail
- PhpMailer là thư viện sau khi đã download ở bước trên
Để có thể sử dụng được thư viện này chúng ta cần require Php Mailer
vào file gửi mail sendmail.php
.
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
Quan trọng: Bạn cần chú ý ở đường dẫn file được require bên trên, nó phải chính xác thì mới chạy ok.
Bước 3: Cấu hình gửi email bằng PhpMailer
Khai báo server gửi mail, thông thường chúng ta gửi mail qua tài khoản gmail chính vì vậy bạn cần khai báo như sau.
Host
$mail ->Host = 'smtp.gmail.com';
Port
Port bạn khai báo 465
hoặc 587
$mail ->Port = 587;
Tiếp tục là thông tin tài khoản email người gửi. Bạn có thể tạo ra một tài khoản gmail mới chuyên dùng để gửi mail hệ thống sau đó khai báo cấu hình như bên dưới
Tài khoản email người gửi
$mail->Username = '[email protected]';
$mail->Password = 'secret';
Giả sử tôi sử dụng email [email protected]
với mật khẩu test!@#
thì tôi khai báo như sau:
$mail->Username = '[email protected]';
$mail->Password = 'test!@#';
Thông tin người nhận email
$mail->setFrom('[email protected]', 'Mailer');
$mail->addAddress('[email protected]', 'Joe User');
$mail->addAddress('[email protected]');
$mail->addReplyTo('[email protected]', 'Information');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');
Trong đó:
setFrom
: Hiển thị thông tin người gửi khi người nhập mở emailaddAddress
: Khai báo email người nhậnaddReplyTo
: Khai báo email nhận được phản hồi của người nhận, nếu không khai báo nó mặc định gửi lại địa chỉ chúng ta gửi đi.addCC/addBCC
: Gửi kèm cho ai đó
Đính kèm file khi gửi mail
Đây là tiện ích khá hay khi bạn muốn đính kèm file trong quá trình gửi mail đến khách hàng. Bạn khai báo đường dẫn file vào đoạn code bên dưới.
$mail->addAttachment('/var/tmp/file.tar.gz');
$mail->addAttachment('/tmp/image.jpg', 'new.jpg');
Cấu hình nội dung email
Đây là khai báo giúp chúng ta thiết kế nội dung email đẹp hơn như bôi đậm, thêm màu sắc, tạo các khoảng cách…
$mail->isHTML(true);
$mail->Subject = 'Đây là tiêu đề email';
$mail->Body = 'Đây là nội dung email gửi từ <b>Unitop!</b>';
$mail->AltBody = 'Đây là nội dung khi gửi plain text không sử dụng định dạng html';
Trong đó:
isHTML(true)
: Khai báo nội dung email hiển thị định dạng htmlSubject
: Khai báo chủ để emailBody
: Khai báo nội dung thư(định dạng html)AltBody
: Khai báo nội dung thư plain text. (Không dùng phần này bạn comment nó lại)
Ví dụ đơn giản về gửi mail bằng Php Mailer
<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require 'PHPMailer/src/Exception.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_SERVER;// Enable verbose debug output
$mail->isSMTP();// gửi mail SMTP
$mail->Host = 'smtp.gmail.com';// Set the SMTP server to send through
$mail->SMTPAuth = true;// Enable SMTP authentication
$mail->Username = '[email protected]';// SMTP username
$mail->Password = 'secret'; // SMTP password
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;// Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
$mail->Port = 587; // TCP port to connect to
//Recipients
$mail->setFrom('[email protected]', 'Mailer');
$mail->addAddress('[email protected]', 'Joe User'); // Add a recipient
$mail->addAddress('[email protected]'); // Name is optional
$mail->addReplyTo('[email protected]', 'Information');
$mail->addCC('[email protected]');
$mail->addBCC('[email protected]');
// Attachments
$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
// Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Bây giờ bạn copy nội dung trên và thay đổi các cấu hình thích hợp với nhu cầu của bạn và chạy test chương trình.
Lưu ý: Bạn cần tạo và sử dụng mật khẩu ứng dụng để tiến hành cấu hình gửi mail.
Cách gửi email SMTP từ WordPress mà không cần plugin
Thay vì cài đặt một plugin khác trên trang web của bạn (phổ biến là WP Mail SMTP), bạn có thể định cấu hình cài đặt email của mình trực tiếp trong WordPress. Điều này sẽ giảm chi phí bạn nhận được khi cài đặt các plugin bổ sung và giúp bạn hiểu cách email WordPress thực sự hoạt động đằng sau hậu trường.
Có hai tập tin mà bạn phải chỉnh sửa:
- wp-config.php: Tệp này tồn tại trong thư mục gốc cài đặt WordPress của bạn. Bạn sẽ cần quyền truy cập FTP hoặc SSH để sửa đổi nó.
- function.php: Bạn có thể truy cập tệp này thông qua bảng điều khiển quản trị viên WordPress trong Giao diện > Trình chỉnh sửa chủ đề .
Trước tiên hãy bắt đầu với tệp wp-config.php.
Xác định cài đặt email trong wp-config.php
Thêm các biến PHP sau vào tệp wp-config.php của bạn. Bạn sẽ muốn cập nhật các giá trị cho từng biến để phản ánh thông tin xác thực email và cài đặt SMTP của riêng bạn.
// SMTP email settings
define( 'SMTP_USER', '[email protected]' );
define( 'SMTP_PASS', 'yourpassword' );
define( 'SMTP_HOST', 'smtp.gmail.com' );
define( 'SMTP_FROM', '[email protected]' );
define( 'SMTP_NAME', 'Tony Florida' );
define( 'SMTP_PORT', '587' );
define( 'SMTP_SECURE', 'tls' );
define( 'SMTP_AUTH', true );
Khi hoàn tất, hãy lưu tập tin.
Ghi đè hàm phpmailer_init trong function.php
Thêm định nghĩa hàm sau vào tệp tin.php.
// Send email via SMTPadd_action( 'phpmailer_init', 'my_phpmailer_example' ); function my_phpmailer_example( $phpmailer ) { $phpmailer->isSMTP(); $phpmailer->Host = SMTP_HOST; $phpmailer->SMTPAuth = SMTP_AUTH; $phpmailer->Port = SMTP_PORT; $phpmailer->Username = SMTP_USER; $phpmailer->Password = SMTP_PASS; $phpmailer->SMTPSecure = SMTP_SECURE; $phpmailer->From = SMTP_FROM; $phpmailer->FromName = SMTP_NAME; }
Khối mã này tạo ra một hàm có tên my_phpmailer_example để ghi đè chức năng của hàm phpmailer_init . Nó sử dụng các biến PHP mà chúng tôi đã xác định trong tệp wp-config. Bằng cách này, khi một plugin khác trên trang web của bạn (như Contact Form 7) cố gắng gửi email, cài đặt SMTP của bạn sẽ được sử dụng thay vì cài đặt mặc định.
Tổng kết
Trên đây tôi đã hướng dẫn bạn cách để gửi email với PhpMailer. Tuy nó khá dài nhưng bạn hãy làm theo từng bước một để tận hưởng thành quả.