SMTP服务扩展

【SMTP服务扩展】 SMTP提供一种可靠的有效的传送机制 , 它用于传送电子邮件 。虽然十几年来 , 它的作用已经有目共睹 , 可是对它功能的扩充也是必不可少的 。对SMTP服务的扩展我们介绍一下:在SMTP转发的邮件中包括信封和内容这两种东西 。我们写信也写信封和信皮 , 我们可以借生活中的信件来帮助理解 。
(1)SMTP信封比较轻易理解 , 它被作为一系列的SMTP协议单元传送 , 它包括发送者地址 , 传送模式 , 还有一个或多个接收者地址 。假如有不清楚的地方 , 请参阅《SMTP协议标准》 。
(2)至于内容 , 它是由两部分组成的 , 一部分是信头 , 一部分是信体 , 信头是由一个个的域/值对(一个域 , 一个值)组成的 , 假如信体有结构的话 , 它的结构是以MIME构造的 。内容从根本上来说是文本的 , 一般也是由ASCII码构成的 , 但是由于使用了MIME , 所以这个限制应该也是没有了 , 但信头却不行 , 一般都应该使用ASCII码表示 。虽然SMTP协议是一个不错的协议 , 可是对它的扩展还是不可避免 , 本文主要说明了一种扩展方法 , 使用这种扩展方法 , 服务器和用户之间可以相互知道对方使用了扩展 , 使用了多少 , 假如进行通信 。
这里我们希望让大家知道网络协议中的一个经验:参数越多 , 死得越快;参数越少 , 越能持久 。参数太多了 , 根本不利于使用 , 无法推广 , 早晚会被别的协议取代 。这也符合科学的基础原理 , 简单 。这说明在实现时一定要小心 , 假如不小心会便得到的远远小于付出的 , 有时根本不能提供任何益处 。
下面我们看一下EHLO命令 , 支持SMTP服务扩展的客户应该以EHLO命令开始SMTP会话 , 而不是通常的HELO命令 。假如服务器也支持 , 那就返回确认响应 , 假如不支持就返回失败响应 。因为引入了EHLO命令 , 因此会话开始的第一条命令可以是HELO或EHLO 。
因此引入了新的参数 , 所以SMTP的MAILFROM和RCPTTO命令行长度也能再是512字节了 , 但是引入新参数的长度必须加以说明 , 以便实现者预备缓冲区 。
命令格式如下:
ehlo-cmd::="EHLO"SPdomainCRLF
在命令成功是 , 服务器返回代码250 , 假如失败返回代码550 , 假如出错 , 返500 , 501 , 502 , 504或421 。对比《SMTP协议标准》 , EHLO命令可以出现在任何HELO命令出现的地方 , 在成功发送一个HELO或EHLO命令后再次发送它会使服务器返回503 。客户这时不能缓存服务器返回的任何信息 。这里一定要注重的是 , 每次开始SMTP扩展服务会话的时候必须发送EHLO命令 。假如服务器能够处理EHLO命令 , 它会返回代码250 。这样 , 服务器和客户就处于初始状态了 , 也就是说 , 所有的状态表和缓冲区已经预备完毕 。通常这种响应是多行的 , 每行响应包括一个要害字 , 假如有的话 , 还有一个或多个参数 , 响应的语法如下:
ehlo-ok-rsp::="250"domain[SPgreeting]CRLF
/("250-"domain[SPgreeting]CRLF
*("250-"ehlo-lineCRLF)
"250"SPehlo-lineCRLF)
greeting::=1*<除了CR或LF的所有字符>
ehlo-line::=ehlo-keyWord*(SPehlo-param)
ehlo-keyword::=(字母/数字)*(字母/数字/"-")
ehlo-param::=1*<随了空格和控制字符外的字符>
ALPHA::=<大写A到Z , 小写A到Z>
DIGIT::=<0到9>
CR::=<回车 , ASCII码13>
LF::=<换行 , ASCII码10>
SP::=<空格 , ASCII码32>
 
虽然EHLO要害字可以是大写 , 小写 , 大小写混合的 , 但是对它的处理是大小写敏感的 , 这是与原来规定不同的 。IANA支持SMTP服务扩展注册 , 相对于每个扩展都有一个相应的EHLO要害字值 , 每个在IANA注册的服务扩展必须在一个RFC中定义 。假如一个要害字以X开头 , 它指的是这个服务扩展是双方约定的 , 不是标准的 。

推荐阅读