我需要为我的SMTP服务器实现对每个连接多条消息的支持。
每条消息都以:
data
<<content>>
.从逻辑上讲,协议状态应该重置为“接收到身份验证后”点。这是正确的吗?
问题:有没有可能任何客户端都使用多个data命令发送消息内容?标准允许这样做吗?
发布于 2012-01-04 04:35:30
来自RFC2821 (“简单邮件传输协议”):
邮件数据以只包含句点的行结尾,即字符序列“。(参见第4.5.2节)。..。接收邮件结束数据指示需要服务器处理所存储的邮件事务信息。此处理将消耗反向路径缓冲区、正向路径缓冲区和邮件数据缓冲区中的信息,并且在此命令完成时,这些缓冲区将被清除。
即在接收到<CRLF>.<CRLF>之后,服务器消耗邮件数据并清除其缓冲器;因此,客户端随后不能发送更多与该消息相关联的内容,因为服务器将忘记该消息。
...启动后,邮件事务按顺序由事务开始命令、一个或多个RCPT命令和一个数据命令组成。..。如果邮件事务已经打开,则不能发送邮件(或SEND、SOML或SAML),即,只有在会话中未启动邮件事务,或者前一个事务成功地以DATA命令结束,或者前一个事务已通过RSET中止时,才应发送该邮件。
即,MAIL开始新的邮件事务,并且成功的DATA命令(由<CRLF>.<CRLF>终止)结束该事务;然后,客户端可以发送另一消息。
来自RFC4954 (“用于身份验证的SMTP服务扩展”):
成功完成AUTH命令后,在同一会话中不能再发出AUTH命令。成功的AUTH命令完成后,服务器必须使用503回复来拒绝任何进一步的AUTH命令。
即认证在每个会话中最多发生一次,并且一直应用到该会话结束。
https://stackoverflow.com/questions/8714123
复制相似问题