การส่งอีเมลใน PHP ไม่ให้เข้าเมลขยะ โดยใช้ PHPMailer
เราจะส่งเมลไม่ให้เข้าเมลขยะ (Junk mail) ได้ยังงัย เมื่อมีเว็บแอปพลิเคชันที่ส่งอีเมล แต่พอส่งไป อีเมลเข้าไปในโฟลเดอร์สแปมหรือเมลขยะของผู้ใช้ ใช้ฟังก์ชัน mail() ของ PHP พยายามปรับ "ส่วนหัว" ที่คิดว่าเป็นปัญหาแต่ก็ไม่ได้ผล บางทีก็คิดว่าปัญหาคือ IP ของเมลเซิร์ฟเวอร์ของเราอยู่ในบัญชีดำบางประเภท พอขอให้เจ้าของเซิร์ฟเวอร์ตรวจสอบ และพวกเขาบอกว่าการทดสอบกลับมาเป็นปกติดี บางโฮสก็ไม่มีปัญหา อย่างไรก็ตาม วิธีแก้ไขคือส่งอีเมลผ่าน SMTP แทน mail() ของ PHP
SMTP คืออะไร
SMTP ย่อมาจาก Simple Mail Transfer Protocol คือ Protocol แบบ TCP/IP ที่ใช้ในการส่ง E-Mail ในเครือข่ายอินเทอร์เน็ต ไปยังเครื่องบริการอื่น ๆ ซี่งสามารถส่งเมล์ไปยังผู้ใช้ได้ทั่วโลก มีข้อจำกัดในเรื่องของความสามารถในการส่ง e-mail ว่ามันสามารถทำได้แบบเป็นคิวเท่านั้น และ SMTP ส่วนใหญ่จะไม่ยอมให้คนนอกองค์กร หรือ IP ที่อยู่นอกองค์กรใช้งาน SMTP
วีธีการส่งอีเมลผ่าน SMTP
เตรียม SMTP Mail Server
- SMTP User : [email protected]
- SMTP Password: mail_password
- SMTP Host: mail.yourdomain.com
- SMTP Port: 587 (Secure TLS) หรือ 465 (Secure SSL)
ติดตั้ง PHPMailer
คุณสามารถติดตั้งไลบรารี PHPMailer ในโครงการ PHP ของคุณได้โดยเรียกใช้คำสั่งต่อไปนี้ใน Composer
composer require phpmailer/phpmailer
การใช้ PHPMailer
การกำหนดค่า PHPMailer
- SMTPDebug ใช้เพื่อแสดงข้อความเกี่ยวกับปัญหาในการเชื่อมต่อและการส่งอีเมล มีค่าดังนี้
- 0 - เป็นค่าเริ่มต้น ปิดใช้งานการดีบัก
- 1 - แสดงข้อความเอาต์พุตที่ส่งโดยไคลเอ็นต์
- 2 - เป็น 1 พร้อมแสดงการตอบกลับที่ได้รับจากเซิร์ฟเวอร์
- 3 - เช่นเดียวกับ 2 รวมถึงข้อมูลเพิ่มเติมเกี่ยวกับการเชื่อมต่อเริ่มต้น – ระดับนี้สามารถช่วยในการวินิจฉัยความล้มเหลวของ STARTTLS
- 4 - เป็น 3 รวมทั้งแสดงข้อมูลระดับล่าง
- isSMTP() ตั้งค่าเมลให้ใช้ SMTP
- isMail() ตั้งค่าให้เมลใช้ฟังก์ชันเมลของ PHP
- Host ระบุเซิร์ฟเวอร์
- SMTPAuth เปิด/ปิดการตรวจสอบสิทธิ์ SMTP
- Username ระบุชื่อผู้ใช้
- Password ระบุรหัสผ่าน
- SMTPSecure ระบุเทคนิคการเข้ารหัส ค่าที่ยอมรับ 'tls' หรือ 'ssl'
- Port ระบุพอร์ต TCP ที่จะเชื่อมต่อ
- isHTML() ถ้าผ่าน จริง ให้กำหนดรูปแบบอีเมลเป็น HTML
- Subject ตั้งหัวข้อของจดหมาย
- Body ตั้งค่าเนื้อหาของ Mail
- AltBody เนื้อหาสำรองในกรณีที่ไคลเอนต์อีเมลไม่รองรับ HTML
ตัวอย่างการใช้งาน
// นำเข้าคลาส PHPMailer
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
// โหลด PHPMailer อัตโนมัติ
require 'vendor/autoload.php';
// สร้างวัตถุคลาส PHPMailer
$mail = new PHPMailer(true);
try {
$mail->SMTPDebug = 2; // เปิดใช้งานเอาต์พุตดีบัก หากใช้งานได้แล้วก็ปิดโดยการคอมเม้นได้เลย
$mail->isSMTP(); // กำหนดให้ mailer ใช้ SMTP
$mail->Host = 'mail.yourdomain.com'; // ระบุเซิร์ฟเวอร์ SMTP หลัก
$mail->SMTPAuth = true; // เปิดใช้งานการตรวจสอบ SMTP
$mail->Username = '[email protected]'; // ชื่อผู้ใช้ SMTP
$mail->Password = 'mail_password'; // รหัสผ่าน SMTP
$mail->SMTPSecure = 'tls'; // เปิดใช้งานการเข้ารหัส TLS หรือ SSL
// $mail->SMTPOptions = array( // หากมีปัญหาการตรวจสอบ SMTPSecure สามารถแก้ไขได้โดยการเปิดใช้ SMTPOptions
// 'ssl' => [
// 'allow_self_signed' => true,
// 'verify_peer' => false,
// 'verify_peer_name' => false,
// ],
// );
$mail->Port = 587; // พอร์ต TCP ที่จะเชื่อมต่อ
$mail->setFrom('[email protected]', 'Name'); // กำหนดผู้ส่งจดหมาย
$mail->addAddress('[email protected]'); // เพิ่มผู้รับ
$mail->addAttachment('url', 'ชื่อไฟล์'); // เพิ่มไฟล์แนบ (ถ้ามี)
$mail->isHTML(true);
$mail->Subject = 'Subject';
$mail->Body = 'HTML message body';
$mail->AltBody = 'Body in plain text for non-HTML mail clients';
$mail->send();
echo "Mail has been sent successfully!";
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
สรุป
เมื่อผู้พัฒนาเว็บไซต์ รับทำเว็บไซต์ ที่มีการส่งอีเมล การใช้งาน PHPMailer คุณสามารถมั่นใจได้ว่าอีเมลของคุณจะถูกส่งอย่างราบรื่นและมีประสิทธิภาพ โดยไม่ต้องวุ่นวายกับการจัดการการส่งอีเมลด้วยตัวเอง หลังจากอ่านบทความนี้แล้ว คุณสามารถเริ่มใช้งาน PHPMailer และเริ่มส่งอีเมลจากแอปพลิเคชัน PHP ของคุณได้อย่างแน่นอน ด้วยไลบารีที่ใช้งานง่าย นักพัฒนาสามารถกำหนดการตั้งค่า SMTP ตั้งค่าคุณสมบัติอีเมล เพิ่มไฟล์แนบ ส่งอีเมล HTML และจัดการข้อผิดพลาดและข้อยกเว้นได้อย่างรวดเร็วและง่ายดาย