PHPMailer อาจเป็นไลบรารี PHP แบบโอเพนซอร์สที่ได้รับความนิยมมากที่สุดในการส่งอีเมลด้วย ครั้งแรกที่ปล่อยออกมาปี 2001 และตั้งแต่นั้นมามันได้กลายเป็นวิธีที่ชื่นชอบของนักพัฒนา PHP ของการส่งอีเมล์ ในบทความนี้เราจะพูดถึงเหตุผลที่คุณควรใช้ PHPMailer แทน mail()
ฟังก์ชันของ PHP และเราจะแสดงตัวอย่างโค้ดเกี่ยวกับวิธีใช้ไลบรารีนี้
ในกรณีส่วนใหญ่มันเป็นอีกทางเลือกหนึ่งของ mail()
ฟังก์ชันของ PHP แต่มีอีกหลายกรณีที่ mail()
ฟังก์ชันไม่ยืดหยุ่นเพียงพอที่จะบรรลุสิ่งที่คุณต้องการ ก่อนอื่น PHPMailer มีอินเทอร์เฟซเชิงวัตถุในขณะที่ mail()
ไม่ใช่เชิงวัตถุ นักพัฒนา PHP มักเกลียดการสร้าง $headers
ในขณะที่ส่งอีเมลโดยใช้ mail()
ฟังก์ชันนี้เนื่องจากผู้พัฒนาต้องการแก้ปัญหานี้ PHPMailer จึงทำให้เรื่องนี้เป็นเรื่องง่าย อีกอย่างยังต้องเขียนโค้ดอีกมากมาย (ที่ไม่ใช้การเข้ารหัสและการจัดรูปแบบ) เพื่อส่งไฟล์แนบและอีเมลที่ใช้ HTML เมื่อใช้ฟังก์ชัน mail()
นี้ ในขณะที่ PHPMailer ทำให้สิ่งนี้ง่ายกว่าเดิม นอกจากนี้ฟังก์ชัน mail()
ต้องใช้เซิร์ฟเวอร์อีเมลภายในเพื่อส่งอีเมลซึ่งไม่ใช่เรื่องสำคัญในการตั้งค่าเสมอไป PHPMailer สามารถใช้เซิร์ฟเวอร์เมลที่ไม่ใช่โลคัล หรือที่เรียกว่า SMTP ได้ หากคุณมีการยืนยันตัวตนในการใช้งาน
PHPMailer มีข้อดีอีก
- สามารถแสดงข้อความข้อผิดพลาดประเภทต่างๆ ในการส่งอีเมล ได้มากกว่า 40 ภาษาเมื่อส่งอีเมลไม่สำเร็จ
- ได้รวมการสนับสนุนโปรโตคอล SMTP และการรับรองความถูกต้องผ่าน SSL และ TLS
- สามารถส่งอีเมลเวอร์ชันข้อความธรรมดาทางเลือกสำหรับไคลเอนต์อีเมลที่ไม่ใช่ HTML
- มีนักพัฒนาที่ใช้งานอยู่มากซึ่งจะช่วยให้ปลอดภัยและทันสมัยอยู่เสมอ
PHPMailer ยังใช้กับระบบจัดการเนื้อหา PHP ยอดนิยมเช่น WordPress, Drupal และ Joomla
มาดูการติดตั้ง และใช้งาน PHPMailer
คุณสามารถติดตั้ง PHPMailer โดยใช้ Composer ตัวอย่างต่อไปนี้จะเรียกใช้งานโดยการ Composer เพื่อติดตั้งก่อน แต่ยังมีอีกหลายวิธีในการเรียกใช้ PHPMailer class เช่น เรียกผ่านไฟล์พาท (Path) หรือ จะใช้ตัวสำเร็จ PHPMailer จะใช้ง่ายกว่า (การเรียกใช้จะต่างกันกับลิ้งแรก) เรียกแค่ไฟล์เดียวจะโหลดทุก Class ก็ใช้ได้เลย
การส่งอีเมลจาก Local Web Server
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
//PHPMailer Object
$mail = new PHPMailer(true); //Argument true in constructor enables exceptions
//From email address and name
$mail->From = "[email protected]";
$mail->FromName = "Full Name";
//To address and name
$mail->addAddress("[email protected]", "Recepient Name");
$mail->addAddress("[email protected]"); //Recipient name is optional
//Address to which recipient will reply
$mail->addReplyTo("[email protected]", "Reply");
//CC and BCC
$mail->addCC("[email protected]");
$mail->addBCC("[email protected]");
//Send HTML or Plain Text email
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
try {
$mail->send();
echo "Message has been sent successfully";
} catch (Exception $e) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
การส่งอีเมลพร้อมไฟล์แนบ
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
$mail = new PHPMailer;
$mail->From = "[email protected]";
$mail->FromName = "Full Name";
$mail->addAddress("[email protected]", "Recipient Name");
//Provide file path and name of the attachments
$mail->addAttachment("file.txt", "File.txt");
$mail->addAttachment("images/profile.png"); //Filename is optional
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
try {
$mail->send();
echo "Message has been sent successfully";
} catch (Exception $e) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
การใช้ SMTP
การใช้ SMTP เพื่อแก้ปัญหาการส่งเมลเป็นสแปมหรือเมลขยะได้ คุณสามารถใช้เซิร์ฟเวอร์อีเมลของโฮสต์อื่นเพื่อส่งอีเมลได้ แต่สำหรับสิ่งนี้คุณต้องมีการตรวจสอบสิทธิ์ก่อน ตัวอย่างเช่นในการส่งอีเมลจากเซิร์ฟเวอร์อีเมลของ Gmail คุณต้องมีบัญชี Gmail SMTP เป็นโปรโตคอลที่ไคลเอ็นต์อีเมลใช้เพื่อส่งคำขอส่งอีเมลไปยังเซิร์ฟเวอร์อีเมล เมื่อเซิร์ฟเวอร์อีเมลตรวจสอบอีเมลแล้ว เซิร์ฟเวอร์จะส่งไปยังเซิร์ฟเวอร์อีเมลปลายทาง นี่คือตัวอย่างของการส่งอีเมลจากเซิร์ฟเวอร์อีเมลของ Gmail จากโดเมนของคุณ คุณไม่จำเป็นต้องมีเซิร์ฟเวอร์เมลภายในเพื่อเรียกใช้รหัส เราจะใช้โปรโตคอล SMTP
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
$mail = new PHPMailer(true);
//Enable SMTP debugging.
$mail->SMTPDebug = 3;
//Set PHPMailer to use SMTP.
$mail->isSMTP();
//Set SMTP host name
$mail->Host = "smtp.gmail.com";
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
//Provide username and password
$mail->Username = "[email protected]";
$mail->Password = "mail_password";
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = "tls";
//Set TCP port to connect to
$mail->Port = 587;
$mail->From = "[email protected]";
$mail->FromName = "Full Name";
$mail->addAddress("[email protected]", "Recepient Name");
$mail->isHTML(true);
$mail->Subject = "Subject Text";
$mail->Body = "<i>Mail body in HTML</i>";
$mail->AltBody = "This is the plain text version of the email content";
try {
$mail->send();
echo "Message has been sent successfully";
} catch (Exception $e) {
echo "Mailer Error: " . $mail->ErrorInfo;
}
Gmail ต้องการการเข้ารหัส TLS ผ่าน SMTP ดังนั้นเราจึงตั้งค่าตามนั้น ก่อนที่คุณจะส่งผ่าน SMTP คุณต้องค้นหาชื่อโฮสต์หมายเลขพอร์ตประเภทการเข้ารหัสหากจำเป็นและหากจำเป็นต้องมีการตรวจสอบความถูกต้องคุณจะต้องมีชื่อผู้ใช้และรหัสผ่านด้วย โปรดทราบว่าการเปิดใช้งานการรับรองความถูกต้องด้วยสองปัจจัยใน Gmail จะไม่อนุญาตให้คุณใช้ SMTP กับชื่อผู้ใช้ / รหัสผ่าน จะต้องมีการกำหนดค่าเพิ่มเติม และนั่นเป็นสิ่งที่ต้องทำเพิ่ม
ข้อได้เปรียบที่สำคัญอย่างหนึ่งในการใช้ SMTP คือหากคุณใช้ mail()
ฟังก์ชันของ PHP เพื่อส่งอีเมลพร้อมกับ from
โดเมนที่อยู่ ที่เป็นสิ่งอื่นที่ไม่ใช่ชื่อโดเมนของเมลที่ส่ง ตัวกรองการโจมตีเซิร์ฟเวอร์อีเมลของผู้รับ จะทำเครื่องหมายเป็นสแปม ตัวอย่างเช่นหากคุณส่งอีเมลจากเซิร์ฟเวอร์ที่มีชื่อโฮสต์จริง example.com
โดยใช้อีเมล [email protected]
ส่งไปยัง [email protected]
เซิร์ฟเวอร์ของ Yahoo จะทำเครื่องหมายว่าเป็นสแปมหรือแสดงข้อความเพื่อไม่ให้ผู้ใช้เชื่อถืออีเมล เนื่องจากที่มาของอีเมลนั้น example.com
แต่กลับเป็น gmail.com
แม้ว่าคุณจะเป็นเจ้าของ [email protected]
ก็ตาม หรือเอาง่ายๆคือ อีเมลของคุณจะถูกผู้รับมองเห็นเป็นสแปมนั่นเอง
สรุป
หากคุณเป็นนักพัฒนา PHP หรือ ทำเว็บไซต์ จะหลีกเลี่ยงการส่งอีเมลทางโปรแกรมแทบไม่ได้เลยเพราะส่วนใหญ่ต้องใช้ และ PHPMailer เป็นทางเลือกยอดนิยมที่นักพัฒนาทั้งหลายเลือกใช้ เนื้อหาข้างต้นจะเป็นแนวทางที่ดีในการเริ่มต้นค้นคว้าเพิ่มเติม หรือเลือกใช้งาน PHPMailer เพื่อให้การส่งอีเมลผ่านเว็บไซต์ของท่านไม่มีปัญหาใด