<sp> ::= 空格(ascii码32) <snum> ::=由一个,两个或三个数字组成的介于0-255之间的数字
<a> ::= 所有a-z的52个大小写英文字母
<c> ::= 128个ascii字符,但不包括空格和特殊字符
<d> ::= 0-9数字
<q> ::=不包括<cr>,<lf>,"或\的128个ascii字符
<x> ::=所有128个ascii字符
<special> ::= "<" | ">" | "(" | ")" | "[" | "]" | "\" | "." | "," | ";" | ":" | "@" """ 或控制字符
注意: "\"是一个转意字符,它表示在其后的字符代表另外的意义。例如"joe\,smith"用于表示单独一个由逗号分隔的用户名。主机通常由转化为地址的名称代表。注意:域的名称元素是正式的名称,不能够使用昵称或假名。
有时候名称的转变机制可能不知道主机,这就造成了通信的阻塞。为了解决这个问题,可以采取两种方法:一种方法是:在"#"后加入一个十进制数表示主机地址;另一种方法是在其后加入32位的ip地址,ip地址的形式是由句号分隔的四个介于0-255之间的十进制数。时间戳行和返回路径行的格式通常由下面定义:
<return-path-line> ::= "return-path:" <sp><reverse-path><crlf>
<time-stamp-line> ::= "received:" <sp> <stamp> <crlf>
<stamp> ::= <from-domain> <by-domain> <opt-info> ";" <daytime>
<from-domain> ::= "from" <sp> <域> <sp>
<by-domain> ::= "by" <sp> <域> <sp>
<opt-info> ::= [<via>] [<with>] [<id>] [<for>]
<via> ::= "via" <sp> <连接> <sp>
<with> ::= "with" <sp> <协议> <sp>
<id> ::= "id" <sp> <字符串> <sp>
<for> ::= "for" <sp> <路径> <sp>
<连接> ::= 在网络信息中心注册的连接的标准名称
<协议> ::= 在网络中心注册的协议的名称
<daytime> ::= <sp> <日期> <sp> <时间>
<日期> ::= <日> <sp> <月> <sp> <年>
<时间> ::= <小时> ":" <分> ":" <秒> <sp> <时区>
<dd> ::= 由一个或两个数字组成的每月1-31日
<月> ::= "jan" | "feb" | "mar" | "apr" | "may" | "jun" | "jul" | "aug" | "sep" | "oct" | "nov" | "dec"
<年> ::= 由两位数字表示本世界的年代00-99
<小时> ::= 每天的24小时,由0到24
<分> ::= 每小时的分钟数0-59
<秒> ::= 每分钟的秒数0-59
<时区> ::= 全球标准时区
-------------------------------------------------------------
返回路径例子
return-path: <@charlie.arpa,@baker.arpa:joe@able.arpa>
-------------------------------------------------------------
-------------------------------------------------------------
时间戳行例子
received: from abc.arpa by xyz.arpa ; 22 oct 81 09:23:59 pdt
received: from abc.arpa by xyz.arpa via telenet with x25
id m12345 for smith@pdq.arpa ; 22 oct 81 09:23:59 pdt
-------------------------------------------------------------
4.2. smtp响应
对smtp命令的响应是多样的,它确定了在邮件传输过程中请求和处理的同步,也保证了发送smtp知道接收smtp的状态。每个命令必须有且只有一个响应。
smtp响应由三位数字组成,其后跟一些文本。数字帮助决定下一个应该进入的状态,而文本对人是有意义的。三位的响应已经包括了足够的信息,不用再阅读文本,文本可以直接抛弃或者传递给用户。特别的是,文本是与接收和环境相关的,所以每次接收到的文本可能不同。在附录e中可以看到全部的响应码。正规的情况下,响应由下面序列构成:三位的数字,<sp>,一行文本和一个<crlf>,或者也可以是一个多行响应。只有expn和help命令可以导致多行应答,然而,对所有命令,多行响应都是允许的。
4.2.1. reply codes by function groups 500 格式错误,命令不可识别(此错误也包括命令行过长)
501 参数格式错误
502 命令不可实现
503 错误的命令序列
504 命令参数不可实现
211 系统状态或系统帮助响应
214 帮助信息
220 <domain> 服务就绪
221 <domain> 服务关闭传输信道
421 <domain> 服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)
250 要求的邮件操作完成
251 用户非本地,将转发向<forward-path>
450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)
550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)
451 放弃要求的操作;处理过程中出错
551 用户非本地,请尝试<forward-path>
452 系统存储不足,要求的操作未执行
552 过量的存储分配,要求的操作未执行
553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)
354 开始邮件输入,以<crlf>.<crlf>结束
554 操作失败
4.3. 命令和应答序列