thefox/smtpd

纯PHP编写的SMTP服务器(库)。

v0.7.0 2018-01-13 15:16 UTC

This package is auto-updated.

Last update: 2024-08-24 04:44:28 UTC


README

SMTP服务器(库)用于接收电子邮件,纯PHP编写。此库提供与SMTP服务器端协议的接口,并为每封到达的电子邮件创建一个\Zend\Mail\Message类对象,然后将此对象传递给自定义PHP函数以进行进一步处理。该项目处于Beta状态,因此不建议在生产环境中使用。

SMTPd中的d代表守护进程。此脚本可以像任何其他守护进程一样在后台运行。它不是为作为Web应用程序运行而设计的。

为什么是这个项目?

信不信由你,电子邮件仍然是互联网的杀手级功能。有很多像PHPMailer这样的项目:用于使用PHP编程发送电子邮件。但接收SMTP电子邮件的项目并不多。

使用此接口,您可以为您应用程序的用户执行以下操作

+------+     +------------------------+     +-------+     +--------------+
| User +---> | MUA (like Thunderbird) +---> | SMTPd +---> | Your PHP App |
+------+     +------------------------+     +-------+     +--------------+

当您有一个用PHP编写的消息应用程序但没有图形用户界面时,这很有用。因此,您的图形用户界面可以是任何电子邮件客户端。例如Thunderbird

项目概述

项目概述如我在开源软件合作的博客文章中所描述。

  • 该软件的主要目的是为PHP脚本提供服务器端SMTP API。
  • 尽管RFC实现尚未完成,但它们必须非常严格。
  • 未来可能还有更多功能。从协议的角度来看,功能必须是RFC实现。
  • 此列表是开放的。请随时提出功能请求。

计划中的功能

  • 完全实现RFC 821
  • 完全实现RFC 1651
  • 完全实现RFC 1869
  • 用更好的解决方案替换Zend\Mail

安装

首选的安装方法是使用PackagistComposer。运行以下命令安装包并将其添加到composer.json中作为要求

composer require thefox/smtpd

投递

目前,服务器接受所有传入的电子邮件。您可以通过向Server对象($server->eventAdd($event))添加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服务器

$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
    • MAIL
    • RCPT
    • DATA
    • NOOP
    • QUIT

RFC 1651实现

完整实现

  • 4.1.1 首个命令
  • 4.5 扩展服务器的错误响应

RFC 3207实现

RFC 4954实现

    1. AUTH命令

相关链接

相关项目

项目链接