smtpd
SMTP服务器(库),用于接收用纯PHP编写的电子邮件。该库提供了带有PHP的SMTP服务器端协议的接口。它为每个传入的电子邮件创建一个\\Zend\\Mail\\Message类对象,并将此对象交给自定义PHP函数以进行进一步处理。该项目处于Beta状态,因此不建议用于生产使用。
smtpd中的d代表守护程序。该脚本可以像其他任何守护程序过程一样在后台运行。这并不是要作为网络应用程序运行。
为什么这个项目?
信不信由你,电子邮件仍然是互联网的杀手级功能。有很多项目,例如phpmailer:以编程方式发送电子邮件(带有PHP)。但是,收到SMTP的电子邮件并不多。
使用此界面,您可以为您的应用程序用户做这样的事情:
smtpd +—> | Your PHP App |
+——+ +————————+ +——-+ +————–+\”>
+------+ +------------------------+ +-------+ +--------------+
| User +---> | MUA (like Thunderbird) +---> | smtpd +---> | Your PHP App |
+------+ +------------------------+ +-------+ +--------------+
当您使用PHP编写消息传递应用程序,但没有图形用户界面时,这很有用。因此,您的图形用户界面可以是任何电子邮件客户端。例如,雷鸟。
项目大纲
该项目概述了我关于开源软件协作的博客文章中所述。
- 该软件的主要目的是为PHP脚本提供服务器端SMTP API。
- 尽管RFC实施尚未完成,但必须严格。
- 将来可能会有更多功能。从协议的角度来看,功能必须是RFC实现。
- 此列表开放。随意请求功能。
计划的功能
- 完整的RFC 821实施。
- 完整的RFC 1651实施。
- 完整的RFC 1869实施。
- 用更好的解决方案替换
Zend\\Mail。
安装
首选的安装方法是通过Packagist和Composer。运行以下命令安装软件包并将其添加为Composer.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 ();
使用带有循环的SMTP服务器
smtpd loop, once.
$server->run();
usleep(10000); // Never run a main thread loop without sleep. Never!
}\”>
$ 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! }
RFC 821实施
完整实施
- 3.5开放和关闭
不完整的实现
- 3.1邮件
- 4.1.1命令语义
- Helo
- 邮件
- rcpt
- 数据
- 不
- 辞职
RFC 1651实施
完整实施
- 4.1.1第一个命令
- 4.5来自扩展服务器的错误响应
RFC 3207实施
RFC 4954实施
-
- auth命令
相关链接
- RFC 821
- RFC 1425
- RFC 1651
- RFC 1869
- RFC 2821
- RFC 3207
- RFC 4954
相关项目
- IMAPD
项目链接
- Packagist软件包
