เซิร์ฟเวอร์ SMTP (ไลบรารี) สำหรับการรับอีเมลที่เขียนด้วย PHP บริสุทธิ์ ไลบรารีนี้ให้อินเทอร์เฟซกับโปรโตคอลฝั่งเซิร์ฟเวอร์ SMTP ด้วย PHP มันสร้างวัตถุคลาส ZendMailMessage สำหรับทุกอีเมลที่เข้ามาและส่งมอบวัตถุนี้ให้กับฟังก์ชั่น PHP ที่กำหนดเองสำหรับการประมวลผลเพิ่มเติม โครงการอยู่ในสถานะเบต้าดังนั้นจึงไม่แนะนำสำหรับการใช้งานการผลิต
d ใน SMTPd หมายถึง daemon สคริปต์นี้สามารถทำงานในพื้นหลังเช่นกระบวนการ daemon อื่น ๆ มันไม่ได้มีไว้สำหรับการทำงานเป็น webapplication
เชื่อหรือไม่ว่า อีเมลยังคงเป็นคุณลักษณะของนักฆ่าของอินเทอร์เน็ต มีโครงการมากมายเช่น phpmailer: เพื่อส่งอีเมลโดยทางโปรแกรม (พร้อม PHP) แต่มีไม่มากที่จะได้รับอีเมลจาก SMTP
ด้วยอินเทอร์เฟซนี้คุณสามารถทำสิ่งนี้สำหรับผู้ใช้แอปของคุณ:
+------+ +------------------------+ +-------+ +--------------+
| User +---> | MUA (like Thunderbird) +---> | SMTPd +---> | Your PHP App |
+------+ +------------------------+ +-------+ +--------------+
สิ่งนี้มีประโยชน์เมื่อคุณมีแอปพลิเคชันการส่งข้อความที่เขียนใน PHP แต่ไม่มีส่วนติดต่อผู้ใช้กราฟิกสำหรับมัน ดังนั้นส่วนต่อประสานผู้ใช้กราฟิกของคุณอาจเป็นไคลเอนต์อีเมลใด ๆ Thunderbird เป็นต้น
โครงร่างโครงการตามที่อธิบายไว้ในโพสต์บล็อกของฉันเกี่ยวกับการทำงานร่วมกันของซอฟต์แวร์โอเพนซอร์ส
ZendMail ด้วยวิธีแก้ปัญหาที่ดีกว่า วิธีการติดตั้งที่ต้องการคือผ่านนักบรรจุหีบห่อและนักแต่งเพลง เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้งแพ็คเกจและเพิ่มเป็นข้อกำหนดของนักแต่งเพลง JSON:
composer require thefox/smtpd ในขณะนี้เซิร์ฟเวอร์รับอีเมลที่เข้ามาทั้งหมด คุณตัดสินใจว่าจะเกิดอะไรขึ้นกับอีเมลที่เข้ามาโดยการเพิ่ม Event S ลงในวัตถุ Server ( $server->eventAdd($event) ) เซิร์ฟเวอร์สามารถจัดการกับเหตุการณ์บางอย่าง แต่ละเหตุการณ์จะถูกดำเนินการในทริกเกอร์บางอย่าง แม้ว่าคุณจะไม่เพิ่มเหตุการณ์ใด ๆ ลงในเซิร์ฟเวอร์ แต่ก็รับอีเมลที่เข้ามาทั้งหมด
ในขณะนี้มีสองเหตุการณ์ทริกเกอร์
TRIGGER_NEW_MAIL : จะถูกทริกเกอร์เมื่อไคลเอนต์ส่งอีเมลใหม่เสร็จแล้วTRIGGER_AUTH_ATTEMPT : จะถูกทริกเกอร์เมื่อลูกค้าต้องการตรวจสอบสิทธิ์ ส่งคืนบูลีนจากฟังก์ชั่นการโทรกลับไม่ว่าการตรวจสอบจะประสบความสำเร็จหรือไม่ ดูเพิ่มเติมที่ไฟล์ example.php สำหรับตัวอย่างเต็มรูปแบบ
$ server = new Server (...);
$ event = new Event (Event:: TRIGGER_NEW_MAIL , null , function ( Event $ event , $ from , $ rcpts , $ mail ){
// Do stuff: handle email, ...
});
$ server -> addEvent ( $ event );
$ server -> loop (); $ server = new Server (...);
$ event = new Event (Event:: TRIGGER_AUTH_ATTEMPT , null , function ( Event $ event , $ type , $ credentials ): bool {
// Do stuff: Check credentials against database, ...
return true ;
});
$ server -> addEvent ( $ event );
$ server -> loop (); $ server = new Server (...);
// Set up server here.
// Add Events, etc, ...
while ( myApplicationRuns ()){
// Do stuff your application needs.
// ...
// Run main SMTPd loop, once.
$ server -> run ();
usleep ( 10000 ); // Never run a main thread loop without sleep. Never!
}