2012-01-03 20 views
2

我需要为我的SMTP服务器实现对每个连接的多个邮件的支持。与SMTP协议:每个连接多个邮件

每个消息结束:

data 
<<content>> 
. 

而且这在逻辑上是协议状态应被重置为“接受验证后”点。这是对的吗?

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

+1

afaik在您从之前的'data'命令得到确认后,您可以发送多条消息,然后跳回到'mail from'命令,例如。正如您在AUTH状态之后所说的那样 – Gryphius 2012-01-03 16:43:03

回答

12

RFC2821(“简单邮件传输协议”):

邮件数据是由只含有一个周期的终止线,这是 ,字符序列“” (见4.5.2节)。

...

回执邮件数据指示的结束都需要服务器来处理邮件存储交易信息。该处理消耗反向路径缓冲区,正向路径缓冲区和邮件数据缓冲区中的信息,并在完成此命令时清除这些缓冲区。

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

...

一旦启动,邮件交易由交易开始的命令,一个或多个RCPT命令和数据的命令,该命令。

...

MAIL(或发,SOML,或SAML),如果邮件已打开事务不得发送,即,应该只有在没有邮件交易已在会议上被启动发送,或者前一个成功的DATA命令已成功结束,或者前一个中止了RSET。

MAIL开始一个新的邮件的交易,和一个成功DATA命令(由<CRLF>.<CRLF>终止)的结论它;客户可能会发送另一条消息。


RFC4954(“SMTP服务扩展身份验证”):

的AUTH命令成功完成后,没有更多的AUTH命令可以在同一会话中发出。一个成功的AUTH命令完成后,一个服务器必须拒绝任何进一步的AUTH命令和503回复。

即,每个会话至多发生一次认证,并且直到该会话结束才应用。

相关问题