我的意思是SMTP/IMAP clients,我指的是一个可以接收和发送电子邮件的工作SMTP服务器。
有很多部分PHP和Go SMTP服务器的示例只监听SMTP连接 - 是否有任何显示如何发送邮件的服务器?
我真的很想学习简单邮件传输协议的后半部分。据我所知,有很多不良服务器与标准不同 - 但我想了解整个协议从开始到结束是如何实现的。
答案 0 :(得分:14)
我认为您误解了SMTP应该如何工作。这是一个简化版本:
邮件用户代理(MUA)通过将邮件发送给邮件提交代理(MSA)对邮件进行排队。
MSA通过SMTP连接到邮件传输代理(“smtp服务器”)。
然后,MTA使用DNS查找收件人域的MX记录。然后,它将收件人的MX服务器作为 SMTP客户端。
MX服务器接受信封;然后将其转发给邮件传递代理(MDA)。
然后,MDA将信封放入某个消息存储库中,其中某些IMAP或POP3服务器会读取消息。然后MUA连接到这些服务器以检索消息。
整个过程使用三个主要命令。 MAIL
,RCPT
和DATA
。
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行为开箱即用。