นักพัฒนา PHP จำนวนมากจำเป็นต้องส่งอีเมลจากโค้ดของตน ฟังก์ชั่น PHP เดียวที่รองรับสิ่งนี้โดยตรงคือ mail()
อย่างไรก็ตาม มันไม่ได้ให้ความช่วยเหลือใดๆ ในการใช้คุณสมบัติยอดนิยม เช่น การเข้ารหัส การรับรองความถูกต้อง ข้อความ HTML และไฟล์แนบ
การจัดรูปแบบอีเมลให้ถูกต้องเป็นเรื่องยากอย่างน่าประหลาดใจ มีมาตรฐานที่ทับซ้อนกัน (และขัดแย้งกัน) มากมาย ซึ่งต้องปฏิบัติตามกฎการจัดรูปแบบและการเข้ารหัสที่ซับซ้อนอย่างเข้มงวด โค้ดส่วนใหญ่ที่คุณจะพบทางออนไลน์ที่ใช้ฟังก์ชัน mail()
โดยตรงนั้นถือเป็นความผิดพลาดธรรมดาๆ หากไม่ปลอดภัย!
ฟังก์ชัน PHP mail()
มักจะส่งผ่านเมลเซิร์ฟเวอร์ในเครื่อง ซึ่งโดยทั่วไปจะมีไบนารี sendmail
อยู่ข้างหน้าบนแพลตฟอร์ม Linux, BSD และ macOS อย่างไรก็ตาม โดยทั่วไปแล้ว Windows จะไม่มีเมลเซิร์ฟเวอร์ในเครื่อง ไคลเอนต์ SMTP แบบบูรณาการของ PHPMailer ช่วยให้สามารถส่งอีเมลบนทุกแพลตฟอร์มโดยไม่ต้องใช้เซิร์ฟเวอร์เมลในเครื่อง โปรดทราบว่าควรหลีกเลี่ยงฟังก์ชัน mail()
เมื่อเป็นไปได้ การใช้ SMTP กับ localhost นั้นเร็วและปลอดภัยกว่า
โปรด อย่าถูกล่อลวงให้ทำเอง หากคุณไม่ได้ใช้ PHPMailer ยังมีไลบรารี่ดีๆ อื่นๆ อีกมากมายที่คุณควรพิจารณาก่อนที่จะเริ่มใช้งาน PHPMailer ลองใช้ SwiftMailer , Laminas/Mail, ZetaComponents ฯลฯ
ซอฟต์แวร์นี้เผยแพร่ภายใต้ใบอนุญาต LGPL 2.1 พร้อมด้วยข้อผูกพันความร่วมมือ GPL โปรดอ่าน LICENSE สำหรับข้อมูลเกี่ยวกับความพร้อมใช้งานและการจำหน่ายซอฟต์แวร์
PHPMailer พร้อมใช้งานบน Packagist (โดยใช้การกำหนดเวอร์ชันเชิงความหมาย) และการติดตั้งผ่าน Composer เป็นวิธีที่แนะนำในการติดตั้ง PHPMailer เพียงเพิ่มบรรทัดนี้ลงในไฟล์ composer.json
ของคุณ:
"phpmailer/phpmailer" : " ^6.9.2 "
หรือวิ่ง
composer require phpmailer/phpmailer
โปรดทราบว่าโฟลเดอร์ vendor
และสคริปต์ vendor/autoload.php
ถูกสร้างขึ้นโดย Composer พวกเขาไม่ได้เป็นส่วนหนึ่งของ PHPMailer
หากคุณต้องการใช้การรับรองความถูกต้อง XOAUTH2 คุณจะต้องเพิ่มการพึ่งพา league/oauth2-client
และแพ็คเกจอะแดปเตอร์บริการที่เหมาะสมใน composer.json
ของคุณ หรือดูที่ wrapper SendOauth2 ของ @decomplexity โดยเฉพาะอย่างยิ่งหากคุณ ใช้บริการของไมโครซอฟต์
อีกทางหนึ่ง หากคุณไม่ได้ใช้ Composer คุณสามารถดาวน์โหลด PHPMailer เป็นไฟล์ zip ได้ (โปรดทราบว่าเอกสารและตัวอย่างไม่รวมอยู่ในไฟล์ zip) จากนั้นคัดลอกเนื้อหาของโฟลเดอร์ PHPMailer ลงในไดเร็กทอรี include_path
อันใดอันหนึ่งที่ระบุใน กำหนดค่า PHP ของคุณและโหลดแต่ละไฟล์คลาสด้วยตนเอง:
<?php
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer Exception ;
require ' path/to/PHPMailer/src/Exception.php ' ;
require ' path/to/PHPMailer/src/PHPMailer.php ' ;
require ' path/to/PHPMailer/src/SMTP.php ' ;
หากคุณไม่ได้ใช้คลาส SMTP
อย่างชัดเจน (อาจไม่ใช่) คุณไม่จำเป็นต้องมีบรรทัด use
สำหรับคลาส SMTP แม้ว่าคุณจะไม่ได้ใช้ข้อยกเว้น คุณยังคงจำเป็นต้องโหลดคลาส Exception
เนื่องจากมีการใช้เป็นการภายใน
PHPMailer 5.2 (ซึ่งเข้ากันได้กับ PHP 5.0 — 7.0) ไม่ได้รับการสนับสนุนอีกต่อไป แม้แต่การอัปเดตความปลอดภัยก็ตาม คุณจะพบเวอร์ชันล่าสุดของ 5.2 ในเวอร์ชัน 5.2-stable หากคุณใช้ PHP 5.5 หรือใหม่กว่า (ซึ่งคุณควรจะเป็น) ให้เปลี่ยนไปใช้เวอร์ชัน 6.x
การเปลี่ยนแปลงที่ใหญ่ที่สุดคือตอนนี้ไฟล์ต้นฉบับอยู่ในโฟลเดอร์ src/
และตอนนี้ PHPMailer ประกาศเนมสเปซ PHPMailerPHPMailer
สิ่งนี้มีผลกระทบที่สำคัญหลายประการ – อ่านคู่มือการอัปเกรดเพื่อดูรายละเอียดเพิ่มเติม
แม้ว่าการติดตั้งแพ็คเกจทั้งหมดด้วยตนเองหรือด้วย Composer จะง่ายดาย สะดวก และเชื่อถือได้ แต่คุณอาจต้องการรวมเฉพาะไฟล์ที่สำคัญในโปรเจ็กต์ของคุณ อย่างน้อยที่สุดคุณจะต้องมี src/PHPMailer.php หากคุณใช้ SMTP คุณจะต้องมี src/SMTP.php และหากคุณใช้ POP ก่อน SMTP (ไม่น่าเป็นไปได้ มาก !) คุณจะต้องมี src/POP3.php คุณสามารถข้ามโฟลเดอร์ภาษาได้ หากคุณไม่แสดงข้อผิดพลาดแก่ผู้ใช้ และสามารถแก้ไขได้เฉพาะข้อผิดพลาดภาษาอังกฤษเท่านั้น หากคุณใช้ XOAUTH2 คุณจะต้องมี src/OAuth.php รวมถึงการพึ่งพา Composer สำหรับบริการที่คุณต้องการตรวจสอบสิทธิ์ด้วย จริงๆ แล้ว การใช้ Composer ง่ายกว่ามาก!
<?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 ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.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_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//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 }" ;
}
คุณจะพบสิ่งต่างๆ มากมายให้เล่นในโฟลเดอร์ตัวอย่าง ซึ่งครอบคลุมสถานการณ์ทั่วไปมากมาย เช่น การส่งผ่าน Gmail การสร้างแบบฟอร์มการติดต่อ การส่งไปยังรายชื่อผู้รับจดหมาย และอื่นๆ
หากคุณใช้อินสแตนซ์ซ้ำ (เช่น เมื่อส่งไปยังรายชื่อผู้รับจดหมาย) คุณอาจต้องล้างรายชื่อผู้รับเพื่อหลีกเลี่ยงการส่งข้อความซ้ำ ดูตัวอย่างรายชื่อผู้รับจดหมายสำหรับคำแนะนำเพิ่มเติม
แค่นั้นแหละ. ตอนนี้คุณควรพร้อมที่จะใช้ PHPMailer แล้ว!
PHPMailer มีค่าเริ่มต้นเป็นภาษาอังกฤษ แต่ในโฟลเดอร์ภาษา คุณจะพบคำแปลมากมายสำหรับข้อความแสดงข้อผิดพลาด PHPMailer ที่คุณอาจพบ ชื่อไฟล์มีรหัสภาษา ISO 639-1 สำหรับการแปล เช่น fr
สำหรับภาษาฝรั่งเศส หากต้องการระบุภาษา คุณต้องบอก PHPMailer ว่าจะใช้ภาษาใด เช่นนี้
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );
เรายินดีรับการแก้ไขและภาษาใหม่ๆ หากคุณกำลังมองหาการแก้ไข ให้เรียกใช้สคริปต์ Language/TranslationCompletenessTest.php ในโฟลเดอร์การทดสอบ จากนั้นสคริปต์จะแสดงคำแปลที่ขาดหายไป
เริ่มอ่านที่วิกิ GitHub หากคุณประสบปัญหา โปรดอ่านคำแนะนำในการแก้ไขปัญหาเนื่องจากมีการอัปเดตบ่อยครั้ง
ตัวอย่างวิธีใช้ PHPMailer สำหรับสถานการณ์ทั่วไปสามารถพบได้ในโฟลเดอร์ตัวอย่าง หากคุณกำลังมองหาจุดเริ่มต้นที่ดี เราขอแนะนำให้คุณเริ่มต้นด้วยตัวอย่าง Gmail
เพื่อลดรอยโค้ดที่ใช้งานของ PHPMailer ตัวอย่างจะไม่รวมอยู่ด้วยหากคุณโหลด PHPMailer ผ่าน Composer หรือผ่านการดาวน์โหลดไฟล์ zip ของ GitHub ดังนั้น คุณจะต้องโคลนพื้นที่เก็บข้อมูล git หรือใช้ลิงก์ด้านบนเพื่อดูตัวอย่างโดยตรง
เอกสาร API ที่สร้างขึ้นโดยสมบูรณ์มีให้ทางออนไลน์
คุณสามารถสร้างเอกสารระดับ API ที่สมบูรณ์ได้โดยการเรียกใช้ phpdoc
ในโฟลเดอร์ระดับบนสุด และเอกสารประกอบจะปรากฏในโฟลเดอร์ docs
แม้ว่าคุณจะต้องติดตั้ง PHPDocumentor ก็ตาม คุณอาจพบว่าหน่วยทดสอบข้อมูลอ้างอิงที่ดีสำหรับวิธีดำเนินการต่างๆ เช่น การเข้ารหัส
หากเอกสารไม่ครอบคลุมสิ่งที่คุณต้องการ ให้ค้นหาคำถามมากมายใน Stack Overflow และก่อนที่คุณจะถามคำถามเกี่ยวกับ "ข้อผิดพลาด SMTP: ไม่สามารถเชื่อมต่อกับโฮสต์ SMTP ได้" โปรดอ่านคู่มือการแก้ไขปัญหา
การทดสอบ PHPMailer ใช้ PHPUnit 9 พร้อมด้วย polyfill เพื่อให้การทดสอบแบบ 9 ทำงานบน PHPUnit และ PHP เวอร์ชันเก่า
หากไม่ผ่าน มีอะไรให้ช่วยไหม?
โปรดเปิดเผยช่องโหว่ใด ๆ ที่พบอย่างมีความรับผิดชอบ – รายงานปัญหาด้านความปลอดภัยแก่ผู้ดูแลเป็นการส่วนตัว
ดูความปลอดภัยและคำแนะนำด้านความปลอดภัยของ PHPMailer บน GitHub
โปรดส่งรายงานข้อผิดพลาด ข้อเสนอแนะ และคำขอดึงไปยังเครื่องมือติดตามปัญหา GitHub
เราสนใจเป็นพิเศษในการแก้ไขกรณี Edge ขยายความครอบคลุมการทดสอบ และอัปเดตการแปล
หากคุณพบข้อผิดพลาดในเอกสารหรือต้องการเพิ่มบางสิ่ง ให้แก้ไขวิกิได้เลย - ใครๆ ก็สามารถแก้ไขได้
หากคุณมี git clone ก่อนที่จะย้ายไปยังองค์กร PHPMailer GitHub คุณจะต้องอัปเดต URL ระยะไกลใดๆ ที่อ้างอิงถึงตำแหน่ง GitHub เก่าด้วยคำสั่งเช่นนี้จากภายในโคลนของคุณ:
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
โปรด อย่า ใช้โครงการ SourceForge หรือ Google Code อีกต่อไป มันล้าสมัยและไม่ได้รับการบำรุงรักษาอีกต่อไป
เวลาในการพัฒนาและทรัพยากรสำหรับ PHPMailer จัดทำโดย Smartmessages.net ซึ่งเป็นระบบการตลาดผ่านอีเมลที่ให้ความสำคัญกับความเป็นส่วนตัวเพียงระบบเดียวของโลก
ยินดีบริจาคเป็นอย่างยิ่ง ไม่ว่าจะเป็นเบียร์ เสื้อยืด หรือเงินสดที่เย็นจัด การสนับสนุนผ่าน GitHub เป็นวิธีที่ง่ายและสะดวกในการกล่าว "ขอบคุณ" กับผู้ดูแลและผู้มีส่วนร่วมของ PHPMailer เพียงคลิกปุ่ม "ผู้สนับสนุน" บนหน้าโครงการ หากบริษัทของคุณใช้ PHPMailer ให้พิจารณาเข้าร่วมในโครงการสนับสนุนองค์กรของ Tidelift
มีให้เป็นส่วนหนึ่งของการสมัครสมาชิก Tidelift
ผู้ดูแล PHPMailer และแพ็คเกจอื่นๆ นับพันกำลังทำงานร่วมกับ Tidelift เพื่อให้การสนับสนุนเชิงพาณิชย์และการบำรุงรักษาสำหรับแพ็คเกจโอเพ่นซอร์สที่คุณใช้ในการสร้างแอปพลิเคชันของคุณ ประหยัดเวลา ลดความเสี่ยง และปรับปรุงประสิทธิภาพของโค้ด ในขณะเดียวกันก็จ่ายเงินให้กับผู้ดูแลแพ็คเกจที่คุณใช้ เรียนรู้เพิ่มเติม
ดูบันทึกการเปลี่ยนแปลง
coolbru
บน SF) และ Andy Prevost ( codeworxtech
) เข้ามารับช่วงต่อโปรเจ็กต์นี้ในปี 2004