(5).没有为扩展服务定义额外的SMTP动词(命令).
(6).在下一章讲解为了支持扩展服务,服务器和客户端会受到怎样的影响.
3流水线服务扩展
当一个SMTP客户希望使用命令流水线时,它首先要向服务器发送EHLO 命令.如
果服务器返回代码250,而且返回信息中包含要害字EHLO本身和它的值PIPELINING,
那么这说明该SMTP服务器支持命令流水线的特性.
3.1客户端使用流水线
一旦SMTP客户端确信服务器支持流水线的特性,那么它就可以不必等待每条命令
的回应而选择使用一组SMTP命令发送到服务器.非凡是,命令RSET,MAILFROM,
SENDFROM,SOMLFROM,SAMLFROM,和RCPTTO可以在命令组中任何地方
出现.而对EHLO,DATA,VERY,EXPN,TURN,QUIT,和NOOP,由于他们的返回结果很关
键,可能影响到整个连接的状态,所以只能出现在命令组的末尾处.(NOOP也属于此类
命令,所以它可以作为连接的同步点).
假如没有非凡说明,由其他SMTP扩展协议定义的额外命令也只能放在命令组的结尾.
实际传递消息内容明确的规定可以作为一个命令组里的第一条命令.也就是说,一个
RDET/MAILFROM用来初始一个新消息的命令序列可以跟上一条消息的传递消息头
部和消息体的命令放在同一个组里.
一个客户端要想实现流水线,必须(MUST)检查在同一个命令组里所有的命令的相关状
态.例如,假如没有一个RCPTTO目的地址被接受,那么客户端必须检查DATA命令
的返回状态.此时,客户端不能想当然的认为DATA一定会失败.假如DATA命令失败了,
这是客户要发送RCPT命令,假如DATA成功的被接受了,那么客户需要发送一个点(.)
来结束DATA命令.
命令状态必须(MUST)能够分清返馈信息和发送的命令之间一一对应的关系,还要清楚
发送的命令数目.多行的反馈信息必须(MUST)得到支持.简单的匹配返回的错误代码
和错误信息是被禁止的.
客户端实现可以(MAY)采用非阻塞模式.即使仍然有上一条TCP发送操作的数据在传输
中,进行处理的服务器对刚刚收到的命令立即进行处理,假如非阻塞操作不被支持,那
么客户端实现必须(MUST)也要检查TCP窗体的大小,以确保每组命令完全跟窗体大小
匹配.一般,窗体大小是4K字节,但也有例外.假如不能确保这种检查正确进行,往往
会导致死锁.
客户端必须不能(MUSTNOT)混淆多条命令和多条反馈.每一条命令需要一条或多条
的信息反馈,在最后一行的反馈代码和信息中不能包含破折号.
3.2服务器支持流水线
一个支持流水线的SMTP服务器必须具备以下条件:
(1).必须(MUST)按照顺序对从客户端提交的命令进行反馈.
(2).应该(SHOULD)对成组的命令RSET,MAILFROM,SENDFROM,SOML
FROM,SAMLFROM,和RCPTTO利用内部缓冲区进行选择性的存储,以便他们能够
当作一个单元进行发送.
(3).当且仅当有一个或多个RCPTTO地址有效时,应该(SHOULD)给与客户端正
确的反馈.
(4).在对没有有效接受方地址的情况下,给了DATA命令以正确的反馈,接着必然
收到一个空的消息正文,此时一定不能(MUSTNOT)给任何接受方发送任何消息.
(5).对命令EHLO,DATA,VEFY,EXPN,TURN,QUIT,和NOOP的反馈不能(MUST
NOT)缓存.
(6).对不能识别的命令一定不能(MUSTNOT)缓存.
(7).当本地的TCP输入缓冲区为空时,一定要(MUST)立即发送所有待发的命令反
馈.
(8).一定不能(MUSTNOT)对尚未收到的命令做任何假设.
(9). 在任何境况下.一定不能(MUSTNOT)刷新TCP输入缓冲区的内容
(10).应该(SHOULD)提供模糊的或是明确的反馈文本来标志与反馈信息相匹配的
命令.
推荐阅读
- 如何去掉多余的单元格
- 针对LDAP的验证方法
- 域名、DNS、A记录以及MX记录的基本概念
- 对EIGRP协议用offset-list命令做负载均衡
- 如何判定行政处罚与行政命令
- 路由器BGP协议配置命令
- 命令行版红雪redsn0w越狱工具详细使用介绍
- SMTP安全
- 波导D720闹铃设置后不响的问题
- BGP常用命令
