日期:2011-02-01  浏览次数:20462 次

本文出自: 作者: (2001-11-23 08:08:00)

4.1.2. COMMAND语法格式
  命令是由命令码和其后的参数域组成的。命令码是四个字母组成的,不区别
大小写。因为下面的命令的作用是相同的:
  MAIL Mail mail MaIl mAIl
  这对于引导任何参数值的标记也是适用的,如TO和to就是一样的。命令码和
参数由一个或多个空格分开。然而在回复路径和转发路径中的参数是区别大小写
的。特别是在一些主机上,"smith"和"Smith"就根本不是一个用户。
参数域由不定长的字符串组成,它由<CRLF>结束,接收方在完全接收到此序列前
不会采取任何行动。方括号代表可选的参数域。如果不选择的话,系统选择默认
的设置。
  下面是SMTP命令:  
HELO <SP> <domain> <CRLF> MAIL <SP> FROM:<reverse-path> <CRLF>
RCPT <SP> TO:<forward-path> <CRLF>
DATA <CRLF>
RSET <CRLF>
SEND <SP> FROM:<reverse-path> <CRLF>
SOML <SP> FROM:<reverse-path> <CRLF>
SAML <SP> FROM:<reverse-path> <CRLF>
VRFY <SP> <string> <CRLF>
EXPN <SP> <string> <CRLF>
HELP [<SP> <string>] <CRLF>
NOOP <CRLF>
QUIT <CRLF>
TURN <CRLF>

  上面参数域的格式在下面给BNF的格式给出,其中的"..."代表对于一个
域的一次或多次的重复。
<reverse-path> ::= <path>
<forward-path> ::= <path>
<path> ::= "<" [ <a-d-l> ":" ] <mailbox> ">"
<a-d-l> ::= <at-domain> | <at-domain> "," <a-d-l>
<at-domain> ::= "@" <domain>
<domain> ::= <element> | <element> "." <domain>
<element> ::= <name> | "#" <number> | "[" <dotnum> "]"
<mailbox> ::= <local-part> "@" <domain>
<local-part> ::= <dot-string> | <quoted-string>
<name> ::= <a> <ldh-str> <let-dig>
<ldh-str> ::= <let-dig-hyp> | <let-dig-hyp> <ldh-str>
<let-dig> ::= <a> | <d>
<let-dig-hyp> ::= <a> | <d> | "-"
<dot-string> ::= <字符串> | <字符串> "." <dot-string>
<字符串> ::= <字符> | <字符> <字符串>
<quoted-string> ::= """ <qtext> """
<qtext> ::= "\" <x> | "\" <x> <qtext> | <q> | <q> <qtext>
<字符> ::= <c> | "\" <x>
<dotnum> ::= <snum> "." <snum> "." <snum> "." <snum>
<number> ::= <d> | <d> <number>
<CRLF> ::= <CR> <LF>
<CR> ::= 回车符(ASCII码13) <LF> ::= (ASCII码10)
<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> <域> <S