SMTP协议:每个连接多封邮件

Bog*_*iev 3 email specifications smtp protocols

我需要为我的SMTP服务器实现每个连接多条消息的支持.

每条消息都以:

data
<<content>>
.
Run Code Online (Sandbox Code Playgroud)

从逻辑上讲,协议状态应该重置为"在接收认证之后"点.这是对的吗?

问题:任何客户端是否可能使用多个data命令发送消息内容?标准是否允许它?

Sim*_*onJ 13

来自RFC2821("简单邮件传输协议"):

邮件数据由仅包含句点的行终止,即字符序列".".(见4.5.2节).

...

收到邮件数据结束指示需要服务器处理存储的邮件交易信息.此处理使用反向路径缓冲区,前向路径缓冲区和邮件数据缓冲区中的信息,并在完成此命令后清除这些缓冲区.

<CRLF>.<CRLF>收到后,服务器消耗邮件数据并清除其缓冲区; 因此,客户端不能再发送与该消息相关联的更多内容,因为服务器将忘记该消息.

...

一旦启动,邮件事务按顺序包括事务开始命令,一个或多个RCPT命令和DATA命令.

...

如果邮件交易已经打开,则不得发送MAIL(或SEND,SOML或SAML),即只有在会话中没有启动邮件交易时才发送邮件,或者前一个邮件交易成功结束DATA命令,或者前一个命令是否使用RSET中止.

MAIL开始一个新的邮件交易,一个成功的DATA命令(终止<CRLF>.<CRLF>)结束它; 然后,客户端可以发送另一条消息.


来自RFC4954("用于身份验证的SMTP服务扩展"):

成功完成AUTH命令后,不会再在同一会话中发出AUTH命令.成功完成AUTH命令后,服务器必须拒绝任何带有503回复的AUTH命令.

即,每个会话最多进行一次身份验证,并应用到该会话结束.