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软件测试网6yaw&_,|$hl}F
接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮51Testing软件测试网d-c8ABLO?
件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮51Testing软件测试网*V&T%J5oU
件可以通过不同网络上的主机接力式传送。
1QTkY4kR3b0
2@~#b;wRi&hb.e){02. SMTP模型 51Testing软件测试网m4N*Q v:]
51Testing软件测试网}BfdiZ
SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接51Testing软件测试网/s4P/XQ,S(O ^3z:Q!G&r
收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中51Testing软件测试网 }FWX7dbQD6[[
^ [c
间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传51Testing软件测试网ZM*WH"gsQ
送。51Testing软件测试网$k/U {be3^m
一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果51Testing软件测试网8Q1y7T*lkL
SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件51Testing软件测试网 UyWq)|6hz
是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出
1Q.^@9t"g0S0拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收51Testing软件测试网V3rS4{ N-RB#`
到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应
dS*_H"]fD/\)vv(_8K0答。
t:w[^{H0
_7igPNk0
V KV:WrN0
} mY%N3p9lo0 SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下51Testing软件测试网y4a'HF9T:K1\1wF#U A
时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个
ir"c:V.fF s}Z'D
B0传送服务下时,通过中继SMTP服务器传送。为了能够对SMTP服务器提供中继能
-Ow2mXZ0力,它必须拥有最终目的主机地址和邮箱名称。
BFM{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:_#PMw
两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户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-Se)u\B"k*C7P1~0
&L%H-O
I+SWB0 本节提供了SMTP中的一些过程。头一个说明的是基本发送过程(定义为51Testing软件测试网0X xw-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软件测试网lys.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:YX p4tdB3_0`0X e0向路由,其中的第一个主机就是发送此命令的主机。51Testing软件测试网H Lh;NA2N7zrJ)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软件测试网jn XZfhm$jz&F
或源无效的情况下失败。
O4ku7t7z7e0
N~]e4OCX0 上面所述的过程是一个发送操作。这些命令只能以上面的顺序使用。下例51Testing软件测试网,Vayvz0{)a+Uc
表示了在一个发送操作中这些命令的使用。51Testing软件测试网+ayx7TlI
x
SMTP过程例子 此例是在Alpha.ARPA主机的Smith发送邮件给Beta.ARPA主机
)lUw{(@
C N'H0的Jones,Green和Brown的,这里假定主机Alpha与主机Beta直接相连。
D.?9FkBM.y0
YedPRV0 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_9G6B f1]"T ED
R: 250 OK
5E0H ZDOg[ 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/x1q X"~0 551 :用户非本地,请尝试<forward-path>
?$U[3R6s051Testing软件测试网3j)_$X[&Yur
这个应答意味着接收SMTP知道用户的邮箱在另外的主机上,并意味着使用
ZaF|9Z T0了正确的转发路径。注意请注意,主机或者用户,或者它们两者是不同的。接51Testing软件测试网 qCXN)[(n2A+P;q
|3ec
收方拒绝接收此用户的信件,发送者必须根据提供的信息重新发送或者向原发51Testing软件测试网*J{BUz/b,[maC+l]
送者返回错误信息。 下例显示了这些响应的应用。51Testing软件测试网
m q*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>
,mG4]]IJ"ZP0 或者51Testing软件测试网5K2w_,h8O:?2{
S: RCPT TO:<Paul@USC-ISIB.ARPA>
:QdU|(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串参数指的是邮件列表,对此命令的响应多于一个,它们要包括所有列表中用