是否有用PHP或Go编写的SMTP服务器?

时间:2012-09-28 18:07:37

标签: php email smtp go

我的意思是SMTP/IMAP clients,我指的是一个可以接收和发送电子邮件的工作SMTP服务器。

有很多部分PHPGo SMTP服务器的示例只监听SMTP连接 - 是否有任何显示如何发送邮件的服务器?

我真的很想学习简单邮件传输协议的后半部分。据我所知,有很多不良服务器与标准不同 - 但我想了解整个协议从开始到结束是如何实现的。

5 个答案:

答案 0 :(得分:14)

我认为您误解了SMTP应该如何工作。这是一个简化版本:

  1. 邮件用户代理(MUA)通过将邮件发送给邮件提交代理(MSA)对邮件进行排队。

  2. MSA通过SMTP连接到邮件传输代理(“smtp服务器”)。

  3. 然后,MTA使用DNS查找收件人域的MX记录。然后,它将收件人的MX服务器作为 SMTP客户端

  4. 联系
  5. MX服务器接受信封;然后将其转发给邮件传递代理(MDA)。

  6. 然后,MDA将信封放入某个消息存储库中,其中某些IMAP或POP3服务器会读取消息。然后MUA连接到这些服务器以检索消息。

  7. 整个过程使用三个主要命令。 MAILRCPTDATA

    • MAIL =信封信息,退回地址等
    • RCTP =收件人。
    • DATA =有效负载。

    SMTP服务器响应 - 实际上非常像HTTP,错误代码并且基于此,MTA知道如何处理信封(它的反弹,所以发送适当的回复等)。

    在这个过程中,没有“检索电子邮件”这一点(略微忽略ETRN);因为SMTP纯粹是用于电子邮件传输而不是检索。

答案 1 :(得分:2)

我发现用PHP编写了一个完整的SMTP server - 甚至还包括一个讨厌的开放中继。

$ sudo php php-smtp.php [ip-address] [port]

答案 2 :(得分:1)

SMTP没有“下半部分”,只有协议。如果您的MUA直接通过TCP与邮件服务器进行交互(而不是使用大多数Unix上的 / usr / bin / sendmail 二进制文件之类的帮助程序),那么它将使用SMTP协议。在发送邮件时,MTA使用相同的协议与其他MTA通信。根据具体情况,它可能会使用更多可用动词。

查看MTA的PHP或Go实现的代码将向您展示一个人/团队如何实施 SMTP协议。

答案 3 :(得分:1)

这是一个只处理邮件的PHP smtpd服务器 - https://github.com/flashmob/Guerrilla-SMTPd 和一个去的港口 https://github.com/flashmob/go-guerrilla

答案 4 :(得分:1)

在ReactPhp上有一个用PHP编写的非阻塞SMTP服务器:

https://bitbucket.org/david_garcia_garcia/smtpserver

它是为最终用户设计的,具有自定义身份验证和传递实现,其余的SMTP行为开箱即用。