热爱测试,主要研究性能测试和自动化测试方面的技术,希望与同样对测试有热情的你一同进步成长

RFC821-简单邮件传输协议(SMTP)(转)

上一篇 / 下一篇  2007-08-03 09:57:34 / 个人分类:网络知识

T-N5oWWC"s%B$_0 1. 介绍
`/`0H6nVJ4W3zUv051Testing软件测试网M0r!s4H {9MB
  简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传51Testing软件测试网$U]\D5b%R;C+nv
送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C51Testing软件测试网m-p |Gc0r Gs
和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用
!TNO[7|0的术语。
8|+a8~(@{"]0wi0  SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了51Testing软件测试网 U5zF~rx
进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络51Testing软件测试网z mc2S Q1^ }V
的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直51Testing软件测试网6ya w&_,|$hl}F
接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮51Testing软件测试网d-c8ABLO?
件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮51Testing软件测试网*V&T%J5o U
件可以通过不同网络上的主机接力式传送。
1QTkY4kR3b0
2@~#b;wRi&hb.e){02. SMTP模型  51Testing软件测试网 m4N*Q v:]
51Testing软件测试网} Bfdi Z
  SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接51Testing软件测试网/s4P/XQ,S(O^3z:Q!G&r
收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中51Testing软件测试网 }FWX7d bQD6[[ ^ [c
间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传51Testing软件测试网ZM*WH"gsQ
送。51Testing软件测试网$k/U {be3^m
  一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果51Testing软件测试网8Q1y7T*lk L
SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件51Testing软件测试网 Uy Wq)|6hz
是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出
1Q.^@9t"g0S0拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收51Testing软件测试网V3rS4{N-RB#`
到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应
dS*_H"]fD/\)vv(_8K0答。
t:w[^{H0
_7ig PNk0
V KV:WrN0
} mY%N3p9l o0  SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下51Testing软件测试网y4a'H F9T:K1\1wF#U A
时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个
ir"c:V.fF s }Z'D B0传送服务下时,通过中继SMTP服务器传送。为了能够对SMTP服务器提供中继能
-Ow2mXZ0力,它必须拥有最终目的主机地址和邮箱名称。
B FM{3b0  MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转51Testing软件测试网 BuQb2Ho
发路径的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径51Testing软件测试网N:i0N|D`8_
(它用于发生错误时返回邮件)。51Testing软件测试网;V%q:f P"G
  当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一51Testing软件测试网;dn:}O4g,A
份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一51Testing软件测试网zJ$QnC8dr1R
个数字代码。在下面,例子中可以看到哪些使用实际的命令和应答。完整的命51Testing软件测试网i1B~N0K)HV
令和应答在第四节。51Testing软件测试网4?Du5HZ6~CA
  命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或51Testing软件测试网(N:_#PM w
两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户51Testing软件测试网1tLiY|J5rWr
名大小写是敏感的。这样SMTP实现中就将用户邮箱名称保留成初始时的样子,
-o J,R%Xg0主机名称对大小写不敏感。51Testing软件测试网)NiR%C^4g
  命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7
+z~p+Ot _}-a0位字符正确传送,而最高位被填充为0。当指定一般的命令或应答格式后,参
G.M{ XM+C%B9x0数会由一些类似于语言的字符串表示出来,如"<string>"或"<reverse-path>",51Testing软件测试网+R"icN&TC#xkx
这里尖括号表示这是一种类似于语言的变量。51Testing软件测试网y+\&q3r-Ow)T(u
51Testing软件测试网:U3I3{U})~T
3. SMTP过程  
'D-S e)u\ B"k*C7P1~0
&L%H-O I+SWB0  本节提供了SMTP中的一些过程。头一个说明的是基本发送过程(定义为51Testing软件测试网0Xxw-L0\b6W
发送操作)。下来描述向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终51Testing软件测试网Ab$w V R#q-k
端和打开关闭交换。在本节的最后是对中断,邮件域的说明。本节的例子只是一
;_7I4wl [B0部分命令和应答的序列,完整的例子见附录F。
r'Esx@-W?I5O{0
9`rT%A_q*]L03.1. MAIL
8|XB/S.T`7N%r0  在SMTP发送操作中有三步,操作由MAIL命令开始给出发送者标识。一系列或51Testing软件测试网!D U-j@X5]
更多的RCPT命令紧跟其后,给出了接收者信息,然后是DATA命令列出发送的邮件51Testing软件测试网n Ao d#L5S ts
内容,最后邮件内容指示符确认操作。51Testing软件测试网ly s.gB7i5T9i%l.T A

PFJ`nz]9k0u0  过程中的第一步是MAIL命令,< reverse-path >包括源邮箱。51Testing软件测试网8l%~*a+Ry:z-ny
51Testing软件测试网o8K?iy4Z G|)W
  MAIL <SP> FROM:<reverse-path> <CRLF>
7F0}Oyp{5D0
o:T vW1xu7x%n0  此命令告诉接收者新的发送操作已经开始,请复位所有状态表和缓冲区。
u bp/?-cU F0它给出反向路径以进行错误信息返回。如果请求被接收,接收方返回一个
6L/a%Gi;xF/nk0250 OK应答。<reverse-path>中不止包括了邮箱,它包括了主机和源邮箱的反
4RkE$J:YXp4tdB3_0`0X e0向路由,其中的第一个主机就是发送此命令的主机。51Testing软件测试网HLh;NA2N7z rJ)zo

Bu G&A K@0  过程中的第二步是发送RCPT命令。
/^U#m,D_051Testing软件测试网)j1WaW7]c
  RCPT <SP> TO:<forward-path> <CRLF>
9? a] k3W"S/l`0
$`!?,? Y(l%v0  此命令给出向前路径标识接收者,如果命令被接收,接收方返回一个
dA*F.|*n Z8\t0250 OK应答,并存储向前路径。如果接收者未知,接收方会返回一个550 Failure51Testing软件测试网Hch}| Y
应答。此过程可能会重复若干次。51Testing软件测试网M9Cr5sfK EQi^!z
  <forward-path>不仅包括邮件,它是主机和目的邮箱的路由表,在其中的
Fq@5}%G;EX0第一个主机就是接收命令的主机。 过程中的第三步是发送DATA命令。51Testing软件测试网1L7A.yerWVx

v)vr?a2C+`9{\#f0DATA <CRLF>
a7TM%iNDM0
xJ8Wmse9H8p*~3ti0  如果命令被接收,接收方返回一个354 Intermediate应答,并认定以下的51Testing软件测试网Sq"R,Y ]a!?AL
各行都是信件内容。当信件结尾收到并存储后,接收者发送一个250 OK应答。51Testing软件测试网'y;oPe!~5m/F
因为邮件是在传送通道上发送,因此必须指明邮件内容结尾,以便应答对话可
0{!GhxIv)Z/ZW0以重新开始。SMTP通过在最后一行仅发送一个句号来表示邮件内容的结束,在51Testing软件测试网/V*^l)h E*m:g
接收方,一个对用户透明的过程将此符号过滤掉,以不影响正常的数据。51Testing软件测试网;^({N(aT$lL
  注意:邮件内容包括如下提示:Date, Subject, To, Cc, From。
j(@1y9tSF-u051Testing软件测试网!]n,A$V2_ zb
  邮件内容指示符确认邮件操作并告知接收者可以存储和再发送数据了。如51Testing软件测试网1^c2q1@.[A
果此命令被接收,接收方返回一个250 OK应答。DATA命令仅在邮件操作未完成51Testing软件测试网j n XZfh m$jz&F
或源无效的情况下失败。
O4ku7t7z7e0
N~]e4O CX0  上面所述的过程是一个发送操作。这些命令只能以上面的顺序使用。下例51Testing软件测试网,V ayvz0{)a+Uc
表示了在一个发送操作中这些命令的使用。51Testing软件测试网+ayx7TlI x
  SMTP过程例子 此例是在Alpha.ARPA主机的Smith发送邮件给Beta.ARPA主机
)l Uw{(@ C N'H0的Jones,Green和Brown的,这里假定主机Alpha与主机Beta直接相连。
D.?9FkBM.y0
Y edPRV0  S: MAIL FROM:<Smith@Alpha.ARPA>
/p^Cz)O0  R: 250 OK51Testing软件测试网pE!A X~/[V {
  S: RCPT TO:<Jones@Beta.ARPA>
.zl)[&E*kJ2NI*A0  R: 250 OK51Testing软件测试网 `q Wv\KZ!O4y+L
  S: RCPT TO:<Green@Beta.ARPA>
9{.yI'rv0  R: 550 No such user here
`x#U9GC$x0  S: RCPT TO:<Brown@Beta.ARPA>
/o N4\0Le-^!] t0  R: 250 OK51Testing软件测试网0~o2y)X^t`%h{
  S: DATA
z#Bb!Bmm7e0  R: 354 Start mail input; end with <CRLF>.<CRLF>
)F,`'R/Nbu0  S: Blah blah blah...51Testing软件测试网6ZH3sY|/@]0O
  S: ...等等51Testing软件测试网F6t^w(KLv
  S: <CRLF>.<CRLF>51Testing软件测试网3h_9G6Bf1]"TED
  R: 250 OK
5E0H ZDO g[y0  此信被前两个人接收,而第三个人在此主机上没有邮箱。51Testing软件测试网/c0UgxJ v$T

OF/kq:s_03.2. 转发  51Testing软件测试网x6f[:z'@5G.x
  下面是一些<forward-path>中目的地址不正确的,但接收者知道正确的目
!{``'@%d!l$es0的地址的例子。在这些例子中,下列应答之一应该允许发送方与获得正确地址。51Testing软件测试网~(S;eR3tgN`f f
51Testing软件测试网/Taw,mab
  251:用户不在本地;将向前发送到<forward-path>。51Testing软件测试网%{4JRt#J

*j5WffJ0  这个应答意味着,接收方SMTP知道用户的邮箱在另外的主机上,而且意味
x#OC-V _C?!F0着将在未来使用正确的转向路径。请注意,主机或者用户,或者它们两者是不
V;}qPts^G0同的。接收方负责传送消息。
;[0wfi2A:Dr0
(TJ/x1qX"~0  551 :用户非本地,请尝试<forward-path>
?$U[3R6s051Testing软件测试网3j)_$X[&Y ur
  这个应答意味着接收SMTP知道用户的邮箱在另外的主机上,并意味着使用
ZaF|9Z T0了正确的转发路径。注意请注意,主机或者用户,或者它们两者是不同的。接51Testing软件测试网 qCXN)[(n2A+P;q |3ec
收方拒绝接收此用户的信件,发送者必须根据提供的信息重新发送或者向原发51Testing软件测试网*J{BUz/b,[ maC+l]
送者返回错误信息。 下例显示了这些响应的应用。51Testing软件测试网 mq*S'Fxz
51Testing软件测试网IJ6X*MM8z
  转发的例子51Testing软件测试网Iw7HE2Y z
  S: RCPT TO:<Postel@USC-ISI.ARPA>
o K c1Wm6[K0  R: 251 User not local; will forward to <Postel@USC-ISIF.ARPA>
,m G4]]IJ"ZP0  或者51Testing软件测试网5K2w_,h8O:?2{
  S: RCPT TO:<Paul@USC-ISIB.ARPA>
:Qd U|(M$b2A0  R: 551 User not local; please try <Mockapetris@USC-ISIF.ARPA>
gB }5I&ytI051Testing软件测试网'^+|.]4@G:F|V
3.3. 确认和扩展51Testing软件测试网fB E!W*lY&j
  SMTP提供了另外的确认用户名和扩展邮件列表的功能。这些功能由VREF和
;X xC"p6`D@0EXPN命令完成,它们都以字符串为参数。对于VREF命令,字符串参数指的是用51Testing软件测试网i-K3E[ X*D[
户名,对此命令的响应要包括用户的命名和用户的邮箱。对于EXPN命令,字符
R7\$@'QR7v]0串参数指的是邮件列表,对此命令的响应多于一个,它们要包括所有列表中用
m4Y&eeLO6S!p0户的命名和他们的邮箱。
$\2Rf#x`!k'n}0  “用户名”是一个多余的项目,它是故意被加上的。如果主机采用VREF命
q(S(TU8J2M_%u0令和EXPN命令,最后本地邮箱必须提供用户名使它被主机确认。如果主机选择51Testing软件测试网6Ls$T:e+a
由另外的字符串作为用户名,也是允许的。51Testing软件测试网2J4Hk*zBRD*g;\(?
  在一些主机中,邮箱列表和一个邮箱的代名有一点不清楚,因为一般的数
+RB-TH1Gv;s0据结构可能包括两种类型的入口。如果要发出对邮件列表的确认,应该给出确
R Y9\ `)XOq0定响应。在接收到这个消息后,主机将把邮件传送到列表上所有的地址上去,51Testing软件测试网4F]Y)? e,y5~'eW ^X!@
如果没有接收到确定响应,就会报告错误。例如,
Q_n {@0"550 That is a mail list, not a user name"。如果请求用于扩展一个用户名,51Testing软件测试网rx&q3{z;dK%`k
可能通过返回包括一个名字的列表来形成确定响应,如果没有接收到确定响应,51Testing软件测试网+C:}o5Ju Y])Do[
就会报告错误。(例如, "550 That is a user name, not a mailing list")。51Testing软件测试网Ny4l,p8lrS!@G
  在多个响应的情况下(通常是对于EXPN而言的),每个应答指定一个邮箱。51Testing软件测试网x I8n a@cI)G%}3E\
在模糊请求的情况下,例如"VRFY Smith",这里两个Smith的响应必须是51Testing软件测试网!Cx fXz J V D#cB
"553 User ambiguous"。51Testing软件测试网 no[-Hs-J~x[-]#];n
51Testing软件测试网 BE ~e:V4rTs
  确认用户名的情况如下例所示:例3:51Testing软件测试网/jqw'{Lt3@
  确认用户名51Testing软件测试网0V V_z@O
  S: VRFY Smith R: 250 Fred Smith <Smith@USC-ISIF.ARPA>
I xOZ.^oN-i7d0  或者51Testing软件测试网1Jy9ep5t3F#g7^1S
  S: VRFY Smith
(S`i9| bj*r0  R: 251 User not local; will forward to <Smith@USC-ISIQ.ARPA>51Testing软件测试网5w3Yzm5k5c+J[
  或者51Testing软件测试网&^3Iq3K/p+T oB
  S: VRFY Jones51Testing软件测试网&vK"{LNw
  R: 550 String does not match anything.
(b-NJ$`k D(Q5o]0  或者51Testing软件测试网&UxGt v`:n.R x
  S: VRFY Jones
6b xh$O$XpV"\ Z[ B0  R: 551 User not local; please try <Jones@USC-ISIQ.ARPA>51Testing软件测试网)Q7U(v(m)e0t
  或者51Testing软件测试网K;[6I*S#S5\7v/pK
  S: VRFY Gourzenkyinplatz51Testing软件测试网V~'{wy3r$q+k
  R: 553 User ambiguous.
jS Et8Y0
hd6E0d#V3v;OdZl]0  邮箱列表要求多个响应的情况如下例所示:51Testing软件测试网EK?M$C-l
  S: EXPN Example-People
`4tQb)v0  R: 250-Jon Postel <Postel@USC-ISIF.ARPA>
]sSi-w%Ii}0  R: 250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>51Testing软件测试网XNL:L}
  R: 250-Sam Q. Smith <SQSmith@USC-ISIQ.ARPA>51Testing软件测试网 O0D7i*W.b ]*?
  R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>
IEt,AUwJ0  R: 250-<joe@foo-unix.ARPA>
1\.u cBD.n|0  R: 250 <xyz@bar-unix.ARPA>
dv+ug\sAh,^0  或者51Testing软件测试网 L7k.}7ng9b
  S: EXPN Executive-Washroom-List51Testing软件测试网 dj4_,n/kzOY h
  R: 550 Access Denied to You.
V9{YW.kz M051Testing软件测试网 X`ny]S)XnO[#o
  VERF和EXPN命令的字符串命令参数因为具体实现的不同而不能再加以限51Testing软件测试网zI7w$t K:X-R/I^-`
制了。在一些系统上,EXPN命令的参数可能是一个包含邮件列表的文件名,51Testing软件测试网s3W`X}Ml
但是在Internet上有许多不同的文件结构。51Testing软件测试网VM X'D_Dy$x!@:F _
  VRFY和EXPN命令在最小实现中并不包括,当它们实现时,它们也不要求51Testing软件测试网8Q&h$] v#U K/qW
被在传送间实现。 51Testing软件测试网oQ dW^k

mk C\ xq03.4. 发送信件(mailing)和获得信件(sending)  
v6I_c-@,Y0  SMTP的主要目的是将邮件发送到用户的邮箱中。由一些主机提供的类似51Testing软件测试网,L)nIH(y-UT-p
的功能是把邮件送至用户的终端(如果用户正打开终端)。将邮件送到用户
lY i jPK] tq0的邮箱中称为发送信件(mailing);而送至用户终端则称之为获得信件
M%Z&u(t1bi7K0(sending)。因为在一些主机上,这两者的实现十分类似,所以它们同时51Testing软件测试网+WG!N4b\ q{,U'D
被放入了SMTP中。然而,获得信件命令在SMTP的最小实现中是没有的。用户
&XR gg$MH0应该具有控制向终端上写信息的能力。大部分主机允许用户接受或者拒绝类51Testing软件测试网&~ko!G"P2T}!XK
似的信息。51Testing软件测试网k+i#vYc
  下面三个命令被定义来支持获得信件。它们被用于邮件命令而不是MAIL
rN_ fm"?0命令,指示接收SMTP这种操作的特殊意义:
$F!O7z c2\2Rb0  SEND <SP> FROM:<reverse-path> <CRLF>
;T*t)g {w1qOJ'yh051Testing软件测试网Z A H L#V^
  SEND命令要求邮件内容直接传送到用户终端。如果用户未打开终端(或
.O8tm0O\ h.|0者未接收终端信息),450响应将返回一个RCPT命令。如果信息被成功发送,51Testing软件测试网"UP u k9PL,U2S
此操作成功。 
nY y5eV)I|051Testing软件测试网/h6H4]E*B4f~/y
  SOML <SP> FROM:<reverse-path> <CRLF> 51Testing软件测试网r5S)zj9Ls
51Testing软件测试网&h i:u%HuW[!S%?
  Send或者MaiL命令要求将邮件内容直接发送到用户的终端上(如果用户
5W3A.N2I/TWz }o0在终端上)。如果用户不在终端上,邮件内容直接进入邮箱。如果邮件被发送51Testing软件测试网o2FJJF0[
到用户终端或者用户信箱,发送操作成功。 
G:O [,SeH4f+B051Testing软件测试网bmQ hF'd]~)RX
  SAML <SP> FROM:<reverse-path> <CRLF>51Testing软件测试网ut5| zW9p j*_F7B['k
51Testing软件测试网.uj"k:x,| N
  Send和MaiL命令要求邮件内容直接发送到用户终端上(如果用户在终端上)。
3a5_`.vO0不管怎么样,信件都会进入信箱。如果信件进入信箱,发送操作成功。51Testing软件测试网9Un%M)\ hPq
  用于MAIL命令的响应和这些命令的响应相同。  
Bv%k!ho051Testing软件测试网,sE0oq [:\V
3.5. 打开和关闭  51Testing软件测试网8M7_}@4T"\U_bz1I
  当打开传送通道时,要交换一些信息以确定双方的身份。以下的命令是
LHA+l6tZ0用于打开和关闭的:
}+| AMKd(qY#G0  HELO <SP> <domain> <CRLF>51Testing软件测试网j:j5L3`2k-L5c LMD
  QUIT <CRLF>
gtpu\0  在HELLO命令中,主机自己发送命令,此命令可以被解释为:“你好,51Testing软件测试网3rp3R7^ ^V+_,_)UWj
我是XX”。51Testing软件测试网7|mt&B a

\z3E"rM ^iiET0  打开联结的例子51Testing软件测试网9q9b%Q+|+KMH
  R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready51Testing软件测试网 pF qsw
  S: HELO USC-ISIF.ARPA51Testing软件测试网UE5k ?8M9L b
  R: 250 BBN-UNIX.ARPA51Testing软件测试网1P5\[8o'xE&v2S([

0Ks{!JLC0  关闭联结的例子51Testing软件测试网 J+A{x)j1Z` P
  S: QUIT51Testing软件测试网 `!w8Y*gu
  R: 221 BBN-UNIX.ARPA Service closing transmission channel51Testing软件测试网~:{&W a uw i'_

;UKy vc;sm03.6. 转发
+VA F_dZ(O"w_0  转发路径可能是如下格式:"@ONE,@TWO:JOE@THREE",在这里,ONE,TWO
;SZ+W3Uy5I{ a6RI5m^7O7l0和THREE是主机。这种格式用于强调地址和路径的区别。邮箱是绝对地址,路
+{F1YmPP8l"L?0径是关于如何到达的信息。这两个概念不应该被混淆。51Testing软件测试网,k5T2n+F|
  概念上,转发路径的元素被移动到回复路径作为从一个SMTP服务器到另一
F]2U7Kv0X"V5v0个SMTP服务器的信息。回复路径是一个反向数据源路径,例如从当前信息的位
d.[X/V{,P{sv0置到发起者的位置。当一个SMTP服务器从转发路径中删除自己的标记并将它插51Testing软件测试网}7x:kxH8sq/EI!PY
入到回复路径中时,它必须使用它发送环境能够理解的名称来进行,以防它的51Testing软件测试网 m0U}q1l Q*nWB"T
名称在不同的环境中被理解为不同的名字。
;rJ!iFa R;n Sx"P0  如果当SMTP接收到信息的转发路径的第一个元素不是此SMTP的标记时,此51Testing软件测试网K'etw3S*v
元素不从转发路径中删除,而被用来决定下一个应该发送到的SMTP服务器。在51Testing软件测试网)|P;O.ljMp9g.q*SXB$a
任何情况下,SMTP都将自己的标记加入反向路径中。51Testing软件测试网EAEr0r2V8kuK
  使用源路径时,接收SMTP接收转发的邮件并发送到另一接收SMTP服务器上。51Testing软件测试网 p3w6|#_ j `.LV,b9r#z
接收服务器可以接受或拒绝转发本地用户的邮件。接收SMTP通过将它自己的标记
AY9Dy)C~0从转发路径移至回复路径的开始处来改变命令参数。这时,接收SMTP变成了发51Testing软件测试网B$qjXA/QC[#y K4C
送SMTP,也就建立了到下一个转发路径中SMTP的通道,然后,它向这个SMTP发
z3[?Gl'y j$Z0送邮件。
{ ps$K5ef/e#S0  在回复路径上的头一个主机应是发送SMTP命令的主机,在转发路径上第一个51Testing软件测试网c'u)V7w^/q.R2K}!C DS
主机应是接收SMTP命令的主机。
j;s9n0C1[)P0  注意:转发路径和回复路径出现在SMTP命令和应答中,但不一定要出现在信51Testing软件测试网-IjGY!d]}p
息中。也就是说,没有必须要这样的路径特别这种格式出现在信息头的"To:",
SD['tHW*Q mm0"From:"和"CC:"等域中。51Testing软件测试网*C M!f x:n z%A?M
   如果SMTP服务器接受了转发任务,但后来它发现因为转发路径不正确或者51Testing软件测试网 Nk'O"kUmsv7C2H
其它原理无法发送邮件,它必须建立一"undeliverable mail"信号,将它此信号51Testing软件测试网j(P1U e:^wBj
送到此信的发主者那里。51Testing软件测试网o)eiq*v
  此信号必须是从此主机的SMTP服务上发出的,当然了,此服务器不应该再报
W#Vg!^S1_ x0告出错信息的错误。一种阻止这种出错报告循环的情况是在信号的邮件命令的回51Testing软件测试网 C;f-q,\NJ%j b9C}?;Jw
复路径上置空。在传送此信息时,允许将回复路径也置为空。一个MAIL命令后的
?{ r+?R,Pk0回复路径为空表现为如下形式:
`2{DL&X$y3\-E0  MAIL FROM:<>51Testing软件测试网]#?p6JXFPx

n$BB+hEE;l#AZ0  下例中显示了不可传送的邮件信息。此信息是对从HOSTW上的JOE发出的邮件51Testing软件测试网+t%rfpV};Gp
经过在HOSTX需要经过HOSTZ到达HOSTY时出错的回应。我们看到的例子是在HOSTX
"jd&CD9U,D?F0和HOSTY之间发生的。
!ua#j V@0
is&D!fR0  不可传送邮件信息的例子51Testing软件测试网LAb'z(n7G!id4m
  S: MAIL FROM:<>
0Y3ZsZ_&~k,c0  R: 250 ok
b @ m(M*AL)O? q0  S: RCPT TO:<@HOSTX.ARPA:JOE@HOSTW.ARPA>51Testing软件测试网#n%x Y)F%?"X
  R: 250 ok
4v1c-R{)N R9f0  S: DATA
8u.u6oV9ur"?0  R: 354 send the mail data, end with .
xX ^Tb9j.Y0  S: Date: 23 Oct 81 11:22:33
g/EAk7Ac2FJw0  S: From: SMTP@HOSTY.ARPA
uMB g y6V,?6E0  S: To: JOE@HOSTW.ARPA
+LJ`XTY.S%a0  S: Subject: Mail System Problem51Testing软件测试网-C.j{uM Gw?#o
  S:51Testing软件测试网*\ [M8u+{0`,d"J-[[(z
  S: Sorry JOE, your message to SAM@HOSTZ.ARPA lost.51Testing软件测试网-b0M[(}C5S
  S: HOSTZ.ARPA said this:
7S.K*q J O,O0  S: "550 No Such User"51Testing软件测试网f oD vgN
  S: .
r u T%aT;U@+k-S's0  R: 250 ok51Testing软件测试网 F%Uv6d;NR m3U

;oI ab9WL}0 3.7. 域  51Testing软件测试网Xppg9L
  域是最近被引入ARPA Internet邮件系统的。使用域可以使地址空间从一
#EE*d$NcY0个平面的普通字符串主机名变成全局地址的一个层次结构。主机由一个域名取51Testing软件测试网/n L%p#e]&x6u5Y
代,起始主机是由一系列元串组成,它们由逗号按最特殊到一般的顺序排列。51Testing软件测试网9Y'Q9G0u@K"?G
  例如,"USC-ISIF.ARPA","Fred.Cambridge.UK"和"PC7.LCS.MIT.ARPA"可51Testing软件测试网M:|3IK-pO\
能是主机-域标识符。
1z'@Uca;M-am+]0  无论域名在SMTP中如何使用,只有正式的名称才可以被使用,不可以使用51Testing软件测试网B*M&I1n"j
假名或昵称。51Testing软件测试网J3w ^!U$`k|

EIv ti6Xe03.8. 改变角色51Testing软件测试网9GaE0U2M/\8u4^ xFW
  TURN命令可以用来改变在传输信道上通信的程序的角色。如果程序A现在是51Testing软件测试网8C*u9^(@~0^7g"s j$~T
发送SMTP,它发送TURN命令并接到OK应答(250)后,它就变为接收SMTP了。同51Testing软件测试网ZxD | K K'M
理,程序B也可以从接收SMTP变为发送SMTP。若要拒绝改变角色,接收方可以发51Testing软件测试网!iB._-n:EH6q!xY'b'd
送502作为应答。51Testing软件测试网jHe0~D!mQ
  注意:此命令是可选的。在使用TCP的传输信道时,一般不使用此命令。然51Testing软件测试网t;gwW8D5h(mr
而,当建立传输信道的代价比较大时,此命令很有用。例如,此命令可以支持一
+h0u/D P6W)E ^O0般公共交换电话系统作为传输信道。51Testing软件测试网{&A'c4^P
51Testing软件测试网&Z T\Pp%n
4. SMTP说明  51Testing软件测试网B!?PE6h{
4.1. SMTP命令  
9G(v.E7sC5SM)^04.1.1. 命令语法  51Testing软件测试网R`c Rs O&z0Rv&^x A
  SMTP命令定义了邮件传输或由用户定义的系统功能。它的命令是由<CRLF>51Testing软件测试网gZcd8T
结束的字符串。而在带有参数的情况下,命令本身由<SP>和参数分开,如果51Testing软件测试网 Y'V5f c iA
未带参数可以直接和<CRLF>连接。邮箱的语法格式必须和接收站点的格式一致。51Testing软件测试网`0LTw Z
下面讨论SMTP命令和应答。
.~/A:W/b1bU_0  发送邮件操作涉及到不同的数据对象,它们由不同的参数相互连接。回51Testing软件测试网3W&z_dr3Mz
复路径就是MAIL命令的参数,而转发路径则是RCPT命令的参数,邮件日期是
P"^b5^"\iP'Y.B+k0DATA命令的参数。这些参数或者数据对象必须跟在命令后。这种模式也就要51Testing软件测试网`:|+j)q(U9P^
求有不同的缓冲区来存储这些对象,也就是说,有一个回复路径缓冲区,一51Testing软件测试网 } M,m,UqMt
个转发路径缓冲区,一个邮件内容缓冲区。特定的命令产生自己的缓冲区,51Testing软件测试网,K|SSr\9Q m
或使一个或多个缓冲的内容被清除。51Testing软件测试网 m { X8\(y2EF
51Testing软件测试网 wJE%bT8l
  HELLO (HELO)51Testing软件测试网+r1i"q%k Q@6l7QX
  此命令用于向接收SMTP确认发送SMTP。参数域包括发送SMTP的主机名。51Testing软件测试网.u9| ? ZF{;P U _F `*~
接收SMTP通过连接确认命令来向发送SMTP确认接收SMTP。引命令和OK响应确
b4ud(U?IK1m$T&}0认发送和接收SMTP进入了初始状态,也就是说,没有操作正在执行,所有状态51Testing软件测试网v h%B1nh7?
表和缓冲区已经被子清除。
]h[W+U/{,V0
4gNcS!kBl*O1h0  MAIL (MAIL)  51Testing软件测试网NwP_UI'xd
  此命令用于开始将邮件发送到一个多个邮箱中。参数域包括回复路径。51Testing软件测试网E }Gb%C}D{
返回路径中包括了可选的主机和发送者邮箱列表。当有主机列表时,它是一51Testing软件测试网5FVz.w _+h$sNR&@
个回复路径源,它说明此邮箱是由在表中的主机一一传递发送(第一个主机
c:w5G4p8sX2@_|%R|0是最后一个接收到此邮件的主机)过来的。此表也有作向发送者返回非传递信
N`,I g/h0号的源路径。因为每个传递主机地址都被加在此表起始处,它就必须使用发送
:^1P0b+}`8li{0IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信
1`9c(?ogef0息的回复路径可能就是空的。51Testing软件测试网t0Fc1n |Ca*Z
  此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将
L1Ia5[.J/v M0此命令的回复路径信息插入到回复路径缓冲区中。
e5|"W6OPOj,Y0?0  RECIPIENT (RCPT)
%stry'|.y7z0  此命令用于确定邮件内容的唯一接收者;多个接收者将由多个此命令指定。51Testing软件测试网+or@fm
转发路径中包括一个可选的主机和一个必须的目的邮箱。当出现主机列表时,51Testing软件测试网,g/lY6mB'L
这就是一个源路径,它指明邮件必须向列表中的上一个主机发送。如果接收51Testing软件测试网j,Nu3q@L M
SMTP未实现邮件的传递发送,就会返回如未知本地用户(550)的信息给用户。51Testing软件测试网#?;Df)`0H@a$]@1\H M
  当邮件被传递发送时,传递主机必须将自己的名称由转发路径的开始处51Testing软件测试网e V8u6M)MI4pv
移至回复路径的结束处。当邮件最终到达目的地时,接收SMTP将以它的主机邮
8SmP"Q$Y?"X.o0件格式自己的名称插入目标邮件中。例如,由传递主机A接收的带有如下参
_]f|+IB.F*g.C0数的邮件时,51Testing软件测试网4mh%o:aF|"h y
  FROM:<USERX@HOSTY.ARPA>51Testing软件测试网RN:p:O%d K6BF-n4T+Km
  TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA>51Testing软件测试网!J:\8F"EB^E
  将会变成如下形式:
:j$U6e3I d2n{+I0  FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA>
BO]'tx3U0  TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.51Testing软件测试网!DGbsK%{-m
  此命令导致它的转发路径参数加入转发路径缓冲区中。51Testing软件测试网f O;ljquH

j,YZSZ&[0  DATA (DATA)51Testing软件测试网 P6mMQaj2b
  接收者将跟在命令后的行作为邮件内容。此命令导致此命令后的邮件内容51Testing软件测试网5u E ~Wap E9dZ6n'^
加入邮件内容缓冲区。邮件内容可以包括所有128个ASCII码字符。邮件内容由只51Testing软件测试网 r#v4Y&^D+~M+U%H]
包括一个句号的行结束,也就是如下的字符序列:"<CRLF>.<CRLF>",它指示了
/k)a7o-{6s3O n)UY%~ C#D0邮件的结束。
%x;\ zkQ(i-e1W{0  邮件内容的结束指示要求接收者现在就处理保存的邮件内容。此过程将回复
6d3\VX'd7]Q;L0路径缓冲区,转发路径缓冲区和邮件内容缓冲区的内容全部清空。如果操作成功,
9{'z`\?| y-lP0接收者必须返回OK应答;如果失败也必须返回失败应答。
$HS|X F3M0  当接收SMTP收到一条信息时,无论是用作转发还是此邮件已经到达目的地,51Testing软件测试网-W%W"E#uN;?
它都必须在邮件内容的开始处加上时间戳这一行,这一行指示了接收到邮件主51Testing软件测试网U!^@BmF}
机和发出此邮件主机的标识,以及接收到邮件内容的时间和日期。转发的信件51Testing软件测试网K.g,l)g"J{
将有多行这样的时间戳。当接收SMTP作最后一站的传送时,它将返回路径信息51Testing软件测试网K]txb
行插入邮件中。此行包括了发送命令中的<reverse-path>的信息。在这里,最51Testing软件测试网8v0uC\} Tw d(S+zN
后一站的传送的意思是邮件将被送到目的用户手中,但在一些情况下,邮件可
0T4?a Nc&O/g l+y2E0能需要更进一步的加工并由另外的邮件系统传送。
}4G%LP(Y%h$bN&^0  可能在返回路径中的邮箱与实际发送的邮件不一致,这个情况可能发生在
~ CI(}&p9Q7q7fk3h0需要传送一个特定的错误处理信箱而不是信件发送者那里。上面所述说明了,51Testing软件测试网?%C0rHS}5R3O:eQ8{
最后的邮件内容由一个返回路径行,和在其后的一个或多个时间戳行构成。这
F,Gz};|V$x,h0些行后面是邮件内容的头和体信息。51Testing软件测试网$r L,aFf9F
  当处理后面的邮件数据指示部分成功时就需要特定的说明。这种情况可能51Testing软件测试网8y1Jw } H@*u
发生在发送SMTP发现当邮件需要传送给多个用户时,只能够成功地向其中的一
1I)n*F `7JM9N'l0部分发送信息这种情况下。在这种情况下,必须对DATA命令发送OK应答,而接51Testing软件测试网1aO+MR+? V.fP
收SMTP组织并发送一个"不可传递邮件"信息到信息的发送者。在此信息中或者51Testing软件测试网4R;BKf*w W6A M:|
发送一个不成功接收者的列表,或者每次发送一个不成接收者,而发送多次。
OW U I&EH;R0所有不可传递邮件信息由MAIL命令发送。51Testing软件测试网mZ.Sp~{OPm

8m,W7G| m6n1L{0  返回路径和接收时间戳例子
+v_ Z;{_mI"o?0  Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA>51Testing软件测试网~Q Mv"k
  Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST
-FNW"pF B&lkkP ?0  Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST51Testing软件测试网$Jj$a?|
  Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST51Testing软件测试网|,d u4nm-ka
  Date: 27 Oct 81 15:01:01 PST  
QgD~ E Y9V0  From: JOE@ABC.ARPA  51Testing软件测试网 F~\R7_oH'{&h2R
  Subject: Improved Mailing System Installed  51Testing软件测试网 @B2^+r*}
  To: SAM@JKL.ARPA  
U"` h0DG,[0
7H7g ?@;s%wH0  This is to inform you that ...  51Testing软件测试网F3a*]7ym$DZT
51Testing软件测试网`Hy7z L G3~"c^

d2wH!b.cZ ? s~0  SEND (SEND)
jJAru9~%NPL0  此命令用于开始一个发送命令,将邮件发送到一个或多个终端上。参数51Testing软件测试网S7gr8_Se0v
域包括了一个回复路径,此命令如果成功就将邮件发送到终端上了。  
w;sE)EQ?xNl0  回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,
{8~K.a#yV6u;O0表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的
9|i7JQB[,`iA0(列表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。
*f3aDBCX0因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接51Testing软件测试网'NF/|X8f H0W3c(C6n o
收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径
"k-T1cv ~*r|0可能就是空的。51Testing软件测试网f~f E.A4Q
  此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将
-{0qy6bZs.X N r0此命令的回复路径信息插入到回复路径缓冲区中。51Testing软件测试网mmq4`SE'A.dl
51Testing软件测试网qayj a@i
  SEND OR MAIL (SOML)
Z4fSrdx0  此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,或者
"Y8d1up8UWpn"q\0传送到邮箱中。对于每个接收者,如果接收者终端打开,邮件内容将被传送到
H:{)Q@7OC5A0接收者的终端上,否则就送到接收者的邮箱中。参数域包括回复路径,如果成
{G"wP!TZ1x0功地将信息送到终端或邮箱中此命令成功。
@N%o3CB0  回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表
RvH#kr2_LN0示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列51Testing软件测试网(n%V'AS-L/i
表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。因51Testing软件测试网+U\-]my/|f
为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收
.y-iifC)w!tW0IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可
*V7E8qK^MY0能就是空的。
dh/bL M1\Wl0  此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将
\ \X Z p4vv7i0此命令的回复路径信息插入到回复路径缓冲区中。51Testing软件测试网BPH*y.c.y'z

sK.gC|tUzF0  SEND AND MAIL (SAML)
P#@nSj r0  此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,并传
WvX/T"sW9a0送到邮箱中。如果接收者终端打开,邮件内容将被传送到接收者的终端上和接51Testing软件测试网Y*g%r^i8b^
收者的邮箱中。参数域包括回复路径,如果成功地将信息送到邮箱中此命令成
D*yZ#[.ZL{:t z/a T0功。51Testing软件测试网u M6o!j4O3Jv
  回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表
]Z.L zz.K2^r0示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列
2P2O;X }1\C%Z0表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。因51Testing软件测试网#};j:r h?0\!D
为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收51Testing软件测试网 tn[5aEu$zQ&d^&B
IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可
} c T9q3q+`0能就是空的。
gYp H5[N.IY0  此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将51Testing软件测试网5``2tq)e*ht
此命令的回复路径信息插入到回复路径缓冲区中。51Testing软件测试网:nNul Bx Z
51Testing软件测试网H"P~?-r F
  RESET (RSET)
&t-nT9JKN`t0  此命令指示当送邮件操作将被放弃。任何保存的发送者,接收者和邮件内
,U Z|8Q8b^0容应该被抛弃,所有缓冲区和状态表应该被清除,接收方必须返回OK应答。
Me5@^*s}5g5}051Testing软件测试网#hON5X P5t
  VERIFY (VRFY)
)^,Whb0}2? I0  此命令要求接收者确认参数是一个用户。如果这是(已经知道的)用户名,51Testing软件测试网(J3xGF x'`
返回用户的全名和指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮
)t,i [3x\Od(M@FDA0件内容缓冲区没有影响。51Testing软件测试网Bz*|7[j[B `.D5q
51Testing软件测试网5\$_ w*F%DT1pK
  EXPAND (EXPN)
7J&T\$I F%W0  此命令要求接收者确认参数指定了一个邮件发送列表,如果是一个邮件发送
w U e.B5]2\(C h0列表,就返回表中的成员。如果这是(已经知道的)用户名,返回用户的全名和
mm/Galku0指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有
8|"] J \N`0影响。51Testing软件测试网B\Qq*`(M&Z

;^4{:Ada8]3^L:O0  HELP (HELP)51Testing软件测试网2l6JJ?/c4c W
  此命令导致接收者向HELP命令的发送者发出帮助信息。此命令可以带参数,51Testing软件测试网:|%LR'k3{#Z8s;X?
并返回特定的信息作为应答。此命令对回复路径缓冲区,转发路径缓冲区和邮件
m V D rS.R,CF0内容缓冲区没有影响。
/VoHK@051Testing软件测试网(t2?gs"mL
  NOOP (NOOP)  
4O(m,qqV?p0  此命令不影响任何参数和已经发出的命令。它只是说明没有任何操作而不是51Testing软件测试网W |,f!y|Fl{5|;a
说明接收者发送了一个OK应答。此命令对回复路径缓冲区,转发路径缓冲区和邮51Testing软件测试网;Q!^$pc7i3u7F
件内容缓冲区没有影响。51Testing软件测试网;iNUJ:^!W
51Testing软件测试网Toj\&A
  QUIT (QUIT)
%]E H6t Ua0  此命令指示接收方必须发送OK应答然后关闭传送信道。接收方在接到QUIT命51Testing软件测试网F)M"|x^3Q,y'Tb
令并做出响应之前不应该关闭通信信道。发送方在发送QUIT命令和接收到响应之
0|0z&El'v8}0前也不应该关闭信道。即使出错,也不应该关闭信道。如果连接被提前关闭,接51Testing软件测试网5S xD;yJB:D&L
收方应该象接收到RSET命令一样,取消所有等待的操作,但不恢复原先已经做过
,T;c&K$zO|0的操作。而发送方应该象接收到暂时错误(4XX)一样假定命令和操作仍在支持51Testing软件测试网l)eOG!u1E F*C.R k?
之中。
u MK5F3zbH0
RZaoSvU0`6a'Z0  TURN (TURN)51Testing软件测试网`CT4b2?f s
  此命令指定接收方要么发送OK应答并改变角色为发送SMTP,要么发送拒绝信
a+e J7Cu6Pa)Q0息并保持自己的角色。如果程序A现在是发送SMTP,它发出TURN命令后接收到
A3V7Azs:]&[;O0OK(250)应答,它就变成了接收SMTP。程序A就进入初始状态,好象通信信道刚
(a$\It2d$Ky AT0打开一样,这时它发送220准备好服务信号。如果程序B现在是接收SMTP,它发
|$Xxq.L S4lM#l3J0出TURN命令后接收到OK(250)应答,它就变成了发送SMTP。程序A就进入初始状
vT9y.jzp l7h6FT0态,好象通信信道刚打开一样,这时它准备接收220准备好服务信号。51Testing软件测试网"]wzH/IH/A"^
若要拒绝改变角色,接收方可以发送502应答。
2o$p.T#?Y}3T'\0  对于这些命令的顺序有一定的限制。对话的第一个命令必须是HELLO命令,
(HXXh$kA0此命令在此后的会话中也可以使用。如果HELLO命令的参数不可接受,必须由返
Y3h{Q:t+|0回一个501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。  51Testing软件测试网P1_2SC1Gw
NOOP,HELP,EXPN和VRFY命令可以在会话的任何时候使用。MAIL,SEND,SOML或
&H2n,bXy0_X]O0SAML命令开始一个邮件操作。一旦开始了以后就要发送RCPT和DATA命令。邮件操51Testing软件测试网FjE h taMJ
作可以由RSET命令终止。在一个会话中可以有一个或多个操作。
#qj KE4t#g:_1Y0  如果在操作开始参数不可接受,必须返回501失败应答,同时接收到的SMTP
n@&S-G#x(ik E0必须保持在与刚才一致的状态下。如果操作中的命令顺序出错,必须返回503失51Testing软件测试网7qOy*d'|7](o.w
败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。
1| W#L&eN SF2S0会话的最后一个命令必须是QUIT命令。此命令在会话的其它时间不能使用。
orb3o-Y:][)^y051Testing软件测试网u{3u K/m \*D


TAG: 网络知识

 

评分:0

我来说两句

Open Toolbar