我需要为我的SMTP服务器实现每个连接多条消息的支持。
每封邮件都以:
结尾data
<<content>>
.
逻辑上,协议状态应该重置为“在接收认证之后”点。这是对的吗?
问题:是否有可能任何客户端使用多个data
命令发送消息内容?标准是否允许它?
答案 0 :(得分:12)
来自RFC2821(“简单邮件传输协议”):
邮件数据由仅包含句点的行终止 是,字符序列“。” (见4.5.2节)。
...
收到邮件数据结束指示要求服务器处理存储的邮件交易信息。此处理使用反向路径缓冲区,前向路径缓冲区和邮件数据缓冲区中的信息,并在完成此命令后清除这些缓冲区。
即。收到<CRLF>.<CRLF>
后,服务器会消耗邮件数据并清除其缓冲区;因此客户端无法然后发送更多与该消息相关的内容,因为服务器将忘记该消息。
...
一旦启动,邮件事务将按顺序包含事务开始命令,一个或多个RCPT命令和DATA命令。
...
如果邮件交易已经打开,则不得发送邮件(或SEND,SOML或SAML),即只有在会话中没有启动邮件交易或者前一个成功结束时才发送邮件使用成功的DATA命令,或者使用RSET中止前一个命令。
即。 MAIL
开始一个新的邮件事务,一个成功的DATA
命令(由<CRLF>.<CRLF>
终止)得出结论;然后,客户端可以发送另一条消息。
从RFC4954(“用于身份验证的SMTP服务扩展”):
成功完成AUTH命令后,不会再在同一会话中发出AUTH命令。成功完成AUTH命令后,服务器必须拒绝任何带有503回复的AUTH命令。</ p>
即。每个会话最多只进行一次身份验证,并在该会话结束前应用。