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

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

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

MWb6JW#P D4D0 1. 介绍
u|fw E#gLM0
Rcx l3@.i0  简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传51Testing软件测试网/\}{+Z9W
送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C51Testing软件测试网(Ok)E;h1m:[ |Y zW
和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用
/[Krs6@0的术语。51Testing软件测试网8sA ku"u(Dn"?
  SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了
*H7Y?@u0进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络
;yP2cTa0e#Wa:E0的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直51Testing软件测试网jj'\Q.I
接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮
0? w-q+z mdp0件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮
s {DQn0件可以通过不同网络上的主机接力式传送。
:t`u1G[9@/e6D051Testing软件测试网TA#f}4]x
2. SMTP模型  51Testing软件测试网5B5HD/d[/N'x1L
51Testing软件测试网tq5C8`v5K-P
  SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接51Testing软件测试网UdCw G&Q
收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中51Testing软件测试网'qQqIHk'K5Y(z6E
间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传51Testing软件测试网^j Q|"@ y v'b
送。
:X-dYsQ'O^'Y8m0  一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果51Testing软件测试网2PVm+KK.O
SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件51Testing软件测试网S ^ rW%}
是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出
RYeh+@Z!d0拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收51Testing软件测试网 ac/fv3P
到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应
McY{1n*b0{(x:z0答。51Testing软件测试网@;{2^.wN3H

+~$?$dM fXX:?051Testing软件测试网4~o t]1`(_

2M$\[6O'P0  SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下
s:Z(|!]bMv0TF0时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个51Testing软件测试网_ s"s:|"aQ_2Ui
传送服务下时,通过中继SMTP服务器传送。为了能够对SMTP服务器提供中继能
!~s{0N0u5\0力,它必须拥有最终目的主机地址和邮箱名称。51Testing软件测试网?"tHNC4J.wx
  MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转51Testing软件测试网~[o:p:T'{1O8H H
发路径的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径51Testing软件测试网Uq1hHTx,IY?.~
(它用于发生错误时返回邮件)。51Testing软件测试网5J"m2_KN9jT
  当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一51Testing软件测试网N+RoYbq} S
份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一
z/~W C;jsu"a0个数字代码。在下面,例子中可以看到哪些使用实际的命令和应答。完整的命51Testing软件测试网K7IRB3zyO2HF
令和应答在第四节。
^j#MPW|rm0V0  命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或51Testing软件测试网f g;{ o'` Z
两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户51Testing软件测试网+D|&gX;{
名大小写是敏感的。这样SMTP实现中就将用户邮箱名称保留成初始时的样子,51Testing软件测试网0PtK u)FN
主机名称对大小写不敏感。
8]7K o!`Z_&f0  命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7
(`.Xz`l q s`U0位字符正确传送,而最高位被填充为0。当指定一般的命令或应答格式后,参
W|YH\#Fx;A0数会由一些类似于语言的字符串表示出来,如"<string>"或"<reverse-path>",
U#O;bcj-cE5h0这里尖括号表示这是一种类似于语言的变量。51Testing软件测试网*u-u9Mn\v

B^M"eX!`03. SMTP过程  51Testing软件测试网Fq9O[A n]t

3L8K-~2nT)Ix^0  本节提供了SMTP中的一些过程。头一个说明的是基本发送过程(定义为
&M8`'niR M's|0发送操作)。下来描述向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终
-z [kbLX!n0端和打开关闭交换。在本节的最后是对中断,邮件域的说明。本节的例子只是一51Testing软件测试网A5TN%l!o5Z!U%o
部分命令和应答的序列,完整的例子见附录F。
]jS.W2HhJ051Testing软件测试网LA{ p,IsFS&t+k Hy|
3.1. MAIL51Testing软件测试网7f [r^N'e,T,D
  在SMTP发送操作中有三步,操作由MAIL命令开始给出发送者标识。一系列或51Testing软件测试网`V&s }XO
更多的RCPT命令紧跟其后,给出了接收者信息,然后是DATA命令列出发送的邮件51Testing软件测试网!wbk&r T3Ev
内容,最后邮件内容指示符确认操作。
`n*D1j,BHhPl051Testing软件测试网_/Q)DJ^c+G
  过程中的第一步是MAIL命令,< reverse-path >包括源邮箱。
%@ @b;n%M-G9{0
|:? QY7S$v|0  MAIL <SP> FROM:<reverse-path> <CRLF>51Testing软件测试网C#L1a5i0J w }
51Testing软件测试网"~"f.x VEi
  此命令告诉接收者新的发送操作已经开始,请复位所有状态表和缓冲区。
5m Kr3Q%r J7vT0它给出反向路径以进行错误信息返回。如果请求被接收,接收方返回一个51Testing软件测试网 R)m#F'BBr#xc2Zg
250 OK应答。<reverse-path>中不止包括了邮箱,它包括了主机和源邮箱的反
6W\b)O|(m7N0向路由,其中的第一个主机就是发送此命令的主机。51Testing软件测试网 qT |%?)n bq6q

LTGV:yh0  过程中的第二步是发送RCPT命令。
L;U ` J'iG0
0G:h2r*{yH8Q0  RCPT <SP> TO:<forward-path> <CRLF>
_%X^.o2H&q"X5K}051Testing软件测试网&L:h/xQO `$` B?
  此命令给出向前路径标识接收者,如果命令被接收,接收方返回一个
w.`-[+_W4R O1v |0250 OK应答,并存储向前路径。如果接收者未知,接收方会返回一个550 Failure51Testing软件测试网3@AY|M:a7`U
应答。此过程可能会重复若干次。
:{hW C8O!y,JpQ0  <forward-path>不仅包括邮件,它是主机和目的邮箱的路由表,在其中的51Testing软件测试网;c)q*wi_-o9x;Le
第一个主机就是接收命令的主机。 过程中的第三步是发送DATA命令。51Testing软件测试网9G I(C j7S;UI3Fs:i
51Testing软件测试网$~-Am"eC}
DATA <CRLF>
8wJ?&m'y'U051Testing软件测试网U*Jx X$gXG#Kf
  如果命令被接收,接收方返回一个354 Intermediate应答,并认定以下的51Testing软件测试网t-_e J/h0c u%ZV!`/i
各行都是信件内容。当信件结尾收到并存储后,接收者发送一个250 OK应答。51Testing软件测试网cx]4D+P5h"v&K
因为邮件是在传送通道上发送,因此必须指明邮件内容结尾,以便应答对话可51Testing软件测试网"A!Z[ ZZub
以重新开始。SMTP通过在最后一行仅发送一个句号来表示邮件内容的结束,在
+O}~t,e0接收方,一个对用户透明的过程将此符号过滤掉,以不影响正常的数据。51Testing软件测试网p8ZI xdp3Jj)]J
  注意:邮件内容包括如下提示:Date, Subject, To, Cc, From。51Testing软件测试网cZo{j2Q;Q8t
51Testing软件测试网_G8uhY/Ix8k
  邮件内容指示符确认邮件操作并告知接收者可以存储和再发送数据了。如
}i D CKO0果此命令被接收,接收方返回一个250 OK应答。DATA命令仅在邮件操作未完成51Testing软件测试网xVd)fm%[,[ S.Cf3@*@
或源无效的情况下失败。51Testing软件测试网 aVh(k_tiT
51Testing软件测试网$zX O/b2]'}n#{EK]
  上面所述的过程是一个发送操作。这些命令只能以上面的顺序使用。下例51Testing软件测试网.Mt/V8c#r6Q/Y'v]&Fov
表示了在一个发送操作中这些命令的使用。
i)X]}3VG3C0  SMTP过程例子 此例是在Alpha.ARPA主机的Smith发送邮件给Beta.ARPA主机51Testing软件测试网a6^b.x!P.b#hA*o}
的Jones,Green和Brown的,这里假定主机Alpha与主机Beta直接相连。51Testing软件测试网C _2Kf3Q D'm.s
51Testing软件测试网G;kyxIiL
  S: MAIL FROM:<Smith@Alpha.ARPA>
2\;J^l!ru0  R: 250 OK
:r!@*OHU t0  S: RCPT TO:<Jones@Beta.ARPA>
0h;o6N9Q-|3?X {0  R: 250 OK51Testing软件测试网;^ Y*O J-S
  S: RCPT TO:<Green@Beta.ARPA>
5`&F:Z"Uw1zZ0  R: 550 No such user here51Testing软件测试网 v7Hc1j#{O7j
  S: RCPT TO:<Brown@Beta.ARPA>51Testing软件测试网3C,s wu t(d{9I'HM
  R: 250 OK51Testing软件测试网QQ4l%@nA {0`2Xt1y+e
  S: DATA
+TH,D$k^-U ^'_7\b8S4E0  R: 354 Start mail input; end with <CRLF>.<CRLF>51Testing软件测试网7Q&|].ove0p
  S: Blah blah blah...
x)zB w"A V0  S: ...等等
0Z&['Vfr0  S: <CRLF>.<CRLF>51Testing软件测试网5}1f0b0o8U
  R: 250 OK51Testing软件测试网D0_ibkr b#Z
  此信被前两个人接收,而第三个人在此主机上没有邮箱。
2nL!QHq051Testing软件测试网P-cDw%l
3.2. 转发  51Testing软件测试网$G(wxyoO;k\h4D
  下面是一些<forward-path>中目的地址不正确的,但接收者知道正确的目
1zi? j]7wt%N0的地址的例子。在这些例子中,下列应答之一应该允许发送方与获得正确地址。51Testing软件测试网v1TJ:u U$I
51Testing软件测试网(I+W5|7{'T}pJ
  251:用户不在本地;将向前发送到<forward-path>。51Testing软件测试网"Da(t.~fH
51Testing软件测试网 f1`e2w;x;h1Y1P
  这个应答意味着,接收方SMTP知道用户的邮箱在另外的主机上,而且意味51Testing软件测试网^FY|o#w.[:hx_
着将在未来使用正确的转向路径。请注意,主机或者用户,或者它们两者是不
fM'g[/Onv0同的。接收方负责传送消息。51Testing软件测试网2a2T2O Oue7zUj:^0f

)|]A6o X$T*LM#~/R0  551 :用户非本地,请尝试<forward-path>51Testing软件测试网/R'J F1O;e2Y/F F`
51Testing软件测试网2\ `$oX;gge
  这个应答意味着接收SMTP知道用户的邮箱在另外的主机上,并意味着使用51Testing软件测试网 R-mx0d Lh ~3M
了正确的转发路径。注意请注意,主机或者用户,或者它们两者是不同的。接
eyl;j,k4x0收方拒绝接收此用户的信件,发送者必须根据提供的信息重新发送或者向原发51Testing软件测试网\1jX\-Nn!z
送者返回错误信息。 下例显示了这些响应的应用。51Testing软件测试网,^ kL,t4ebd
51Testing软件测试网} |!kG*]}7wl
  转发的例子
!Hc ~u@ X!O0  S: RCPT TO:<Postel@USC-ISI.ARPA>51Testing软件测试网qaFmn$o
  R: 251 User not local; will forward to <Postel@USC-ISIF.ARPA>51Testing软件测试网wY&E%v+XlL7~d/kz
  或者
1UA?n4L(R @'Fz0  S: RCPT TO:<Paul@USC-ISIB.ARPA>51Testing软件测试网5Q @a&Kp u Yv
  R: 551 User not local; please try <Mockapetris@USC-ISIF.ARPA>51Testing软件测试网*L ajZX n C

xK(JGA,K2QB03.3. 确认和扩展51Testing软件测试网?/[ |,tF
  SMTP提供了另外的确认用户名和扩展邮件列表的功能。这些功能由VREF和
5`q)VC k tLx0EXPN命令完成,它们都以字符串为参数。对于VREF命令,字符串参数指的是用
he)Lk6{0户名,对此命令的响应要包括用户的命名和用户的邮箱。对于EXPN命令,字符
Cr9rN)QI0串参数指的是邮件列表,对此命令的响应多于一个,它们要包括所有列表中用51Testing软件测试网:u&l+Ye8O1NU
户的命名和他们的邮箱。51Testing软件测试网"]G%Kb%D4aoi
  “用户名”是一个多余的项目,它是故意被加上的。如果主机采用VREF命
$X+@/bQeU}v(u0令和EXPN命令,最后本地邮箱必须提供用户名使它被主机确认。如果主机选择51Testing软件测试网8a1tbY ak(hC+c
由另外的字符串作为用户名,也是允许的。51Testing软件测试网 Ld;fQ"D
  在一些主机中,邮箱列表和一个邮箱的代名有一点不清楚,因为一般的数
d P8R&k"]wtT0据结构可能包括两种类型的入口。如果要发出对邮件列表的确认,应该给出确51Testing软件测试网 EAV&_*mu-B^O
定响应。在接收到这个消息后,主机将把邮件传送到列表上所有的地址上去,51Testing软件测试网LV nQ Z
如果没有接收到确定响应,就会报告错误。例如,51Testing软件测试网P*d nE&E&@6o
"550 That is a mail list, not a user name"。如果请求用于扩展一个用户名,
@` ]:o{'mO5gK4O0可能通过返回包括一个名字的列表来形成确定响应,如果没有接收到确定响应,51Testing软件测试网-~!CAt6\;f,u
就会报告错误。(例如, "550 That is a user name, not a mailing list")。
%d]Fe;Gz8_wJ0  在多个响应的情况下(通常是对于EXPN而言的),每个应答指定一个邮箱。
q1Vih({&y5[nh0在模糊请求的情况下,例如"VRFY Smith",这里两个Smith的响应必须是
A~\}&\8`4|*M;|0"553 User ambiguous"。
? QOs7L+~6_q'Bpi0
v2QIq3\2B0  确认用户名的情况如下例所示:例3:51Testing软件测试网1m6p4D#crX
  确认用户名
8fQ4m6KS/A ]0  S: VRFY Smith R: 250 Fred Smith <Smith@USC-ISIF.ARPA>51Testing软件测试网0bR}_smDGW
  或者
M8Z"VjH;sv8]0  S: VRFY Smith51Testing软件测试网Xc d;R#K^*R$q s
  R: 251 User not local; will forward to <Smith@USC-ISIQ.ARPA>51Testing软件测试网1K-B~u1i
  或者51Testing软件测试网4w+u?}"t)SP
  S: VRFY Jones
7Mr!C HlGWIy?_0  R: 550 String does not match anything.51Testing软件测试网0wP L-vR1j b?
  或者
$ul_J_p0  S: VRFY Jones
D-@?jL5s0  R: 551 User not local; please try <Jones@USC-ISIQ.ARPA>51Testing软件测试网(nZ8`.^c
  或者51Testing软件测试网6B#W8~!{A2XUw
  S: VRFY Gourzenkyinplatz
vcK*?/sK6Ro0  R: 553 User ambiguous.51Testing软件测试网m%K"jIa BHJ#RT

vib7V^,~)A0  邮箱列表要求多个响应的情况如下例所示:
QSo5v I[iKT wB0  S: EXPN Example-People51Testing软件测试网 hlH)mCv,D
  R: 250-Jon Postel <Postel@USC-ISIF.ARPA>
CQ LV_U~ @1N E0Qw0  R: 250-Fred Fonebone <Fonebone@USC-ISIQ.ARPA>51Testing软件测试网 Y"DK!_Knr ]8_
  R: 250-Sam Q. Smith <SQSmith@USC-ISIQ.ARPA>51Testing软件测试网)D8?R5r0J o*L8J
  R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>51Testing软件测试网]ZQJ-{
  R: 250-<joe@foo-unix.ARPA>
D:N1qp!b9^0  R: 250 <xyz@bar-unix.ARPA>
}?b B?;[0  或者
-ctUCcLt Lq.~+C0  S: EXPN Executive-Washroom-List51Testing软件测试网X2U-bTX%qh3w
  R: 550 Access Denied to You.51Testing软件测试网?2M4kP1|gV

b:P rqZXF0  VERF和EXPN命令的字符串命令参数因为具体实现的不同而不能再加以限51Testing软件测试网ZRkb/y1a5fO2a
制了。在一些系统上,EXPN命令的参数可能是一个包含邮件列表的文件名,
"r/`AP!oI.~9K0但是在Internet上有许多不同的文件结构。
%q!eB S~#]0  VRFY和EXPN命令在最小实现中并不包括,当它们实现时,它们也不要求51Testing软件测试网R4Xy2y-v
被在传送间实现。 51Testing软件测试网uS4S y?1K)vnI7u l
51Testing软件测试网'F.\| k,vi9{
3.4. 发送信件(mailing)和获得信件(sending)  51Testing软件测试网v au5`S
  SMTP的主要目的是将邮件发送到用户的邮箱中。由一些主机提供的类似51Testing软件测试网Tx[3t!y?o-M
的功能是把邮件送至用户的终端(如果用户正打开终端)。将邮件送到用户
6N'd5K1\1I{7|g-B0的邮箱中称为发送信件(mailing);而送至用户终端则称之为获得信件
+})ur&Dn2oW0(sending)。因为在一些主机上,这两者的实现十分类似,所以它们同时51Testing软件测试网7{`.O\5Z7P
被放入了SMTP中。然而,获得信件命令在SMTP的最小实现中是没有的。用户
+j3bb a.rBE0应该具有控制向终端上写信息的能力。大部分主机允许用户接受或者拒绝类51Testing软件测试网:adq`^_L-Z
似的信息。51Testing软件测试网$P$V%frW!K
  下面三个命令被定义来支持获得信件。它们被用于邮件命令而不是MAIL51Testing软件测试网ES,Oe.fm7g ^4B
命令,指示接收SMTP这种操作的特殊意义:51Testing软件测试网;C"XmJwxYF
  SEND <SP> FROM:<reverse-path> <CRLF>51Testing软件测试网"P1O4v%z$D1Bg7q.^
51Testing软件测试网4A{?6t1vy-E-Y)I1oo
  SEND命令要求邮件内容直接传送到用户终端。如果用户未打开终端(或
8J&m1nR2{yw:GQ&u7T0者未接收终端信息),450响应将返回一个RCPT命令。如果信息被成功发送,51Testing软件测试网 _prz A?-Ac'`D1u
此操作成功。 
)g3r+e)L _0
Dw8v2a'`&ap5s-xR0  SOML <SP> FROM:<reverse-path> <CRLF> 
F:r!Xm)H%bi0
V6~2n`+ST_0  Send或者MaiL命令要求将邮件内容直接发送到用户的终端上(如果用户51Testing软件测试网@WB"RU[Y%h2h"^F
在终端上)。如果用户不在终端上,邮件内容直接进入邮箱。如果邮件被发送51Testing软件测试网%Mx;T%SpDqm
到用户终端或者用户信箱,发送操作成功。 51Testing软件测试网^yl.Vk gx

.kG3~4T$B D MB0  SAML <SP> FROM:<reverse-path> <CRLF>51Testing软件测试网d-P V,J4{J"l)~3o$i$}q
51Testing软件测试网;c c3YH;n4X8[,e
  Send和MaiL命令要求邮件内容直接发送到用户终端上(如果用户在终端上)。51Testing软件测试网U M#TM!M:^(r
不管怎么样,信件都会进入信箱。如果信件进入信箱,发送操作成功。
:}Qeq`u2f0  用于MAIL命令的响应和这些命令的响应相同。  51Testing软件测试网-T"tO e7R

,?'p4T)Lp^^03.5. 打开和关闭  
F#u+Xr)os3J0  当打开传送通道时,要交换一些信息以确定双方的身份。以下的命令是51Testing软件测试网6[ A2};_1{6SA
用于打开和关闭的:
TM|$]$bY5k({[l7[0  HELO <SP> <domain> <CRLF>51Testing软件测试网v S)O V ^W;U
  QUIT <CRLF>
E`5IA8_3DD.z0  在HELLO命令中,主机自己发送命令,此命令可以被解释为:“你好,
;Y%c+ry ot@ X0我是XX”。51Testing软件测试网:S"gh`_$T S9w s

9G0gS U5w.ypC0  打开联结的例子
%_#b5M8j0`\fS0  R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready51Testing软件测试网2\E6C9xT0t9Z
  S: HELO USC-ISIF.ARPA51Testing软件测试网+M7Y [3TjfKB&j ET
  R: 250 BBN-UNIX.ARPA
&P0_w+cO5]051Testing软件测试网j3E}x|8OCL
  关闭联结的例子
i,R m\9i]x0  S: QUIT51Testing软件测试网]_|&C0kP
  R: 221 BBN-UNIX.ARPA Service closing transmission channel51Testing软件测试网 b[4Apin0ZI%nV

*T"NwGO5Y$i03.6. 转发51Testing软件测试网Ln(bpj
  转发路径可能是如下格式:"@ONE,@TWO:JOE@THREE",在这里,ONE,TWO51Testing软件测试网n U|h:_b6q2B8}
和THREE是主机。这种格式用于强调地址和路径的区别。邮箱是绝对地址,路51Testing软件测试网 [0?0F3QF:G p
径是关于如何到达的信息。这两个概念不应该被混淆。
K&G*k v |n0  概念上,转发路径的元素被移动到回复路径作为从一个SMTP服务器到另一51Testing软件测试网7fLp:Q1O?2P ? d]
个SMTP服务器的信息。回复路径是一个反向数据源路径,例如从当前信息的位51Testing软件测试网 k{ce?\$E[V
置到发起者的位置。当一个SMTP服务器从转发路径中删除自己的标记并将它插51Testing软件测试网s-H!^FA&w*u0LL,R
入到回复路径中时,它必须使用它发送环境能够理解的名称来进行,以防它的51Testing软件测试网.fZ,k h:O,@ E
名称在不同的环境中被理解为不同的名字。
]0a7Y `/C0  如果当SMTP接收到信息的转发路径的第一个元素不是此SMTP的标记时,此
n1e(d!X/{ z0元素不从转发路径中删除,而被用来决定下一个应该发送到的SMTP服务器。在51Testing软件测试网@]X/^Z[
任何情况下,SMTP都将自己的标记加入反向路径中。51Testing软件测试网$V&P;l#om v:Y
  使用源路径时,接收SMTP接收转发的邮件并发送到另一接收SMTP服务器上。51Testing软件测试网Ky'\\+z0mwX;Q
接收服务器可以接受或拒绝转发本地用户的邮件。接收SMTP通过将它自己的标记51Testing软件测试网LD)al*N2S0j/o$Tg
从转发路径移至回复路径的开始处来改变命令参数。这时,接收SMTP变成了发
4v}*t6O9re0送SMTP,也就建立了到下一个转发路径中SMTP的通道,然后,它向这个SMTP发51Testing软件测试网y4^q0`iu4p
送邮件。
*F:N#c z3W1C0  在回复路径上的头一个主机应是发送SMTP命令的主机,在转发路径上第一个51Testing软件测试网3{#~+x^~z0ob
主机应是接收SMTP命令的主机。
5~ l8g&mV,t)S%T^9{;e0  注意:转发路径和回复路径出现在SMTP命令和应答中,但不一定要出现在信51Testing软件测试网FV|?)z(O
息中。也就是说,没有必须要这样的路径特别这种格式出现在信息头的"To:",
5P6_;Gd%F@0"From:"和"CC:"等域中。51Testing软件测试网6u4~8P.|2H#FJY7R-@
   如果SMTP服务器接受了转发任务,但后来它发现因为转发路径不正确或者51Testing软件测试网k)@W8W%d5x9W
其它原理无法发送邮件,它必须建立一"undeliverable mail"信号,将它此信号51Testing软件测试网P!HjO!no N
送到此信的发主者那里。51Testing软件测试网nlrcVf L
  此信号必须是从此主机的SMTP服务上发出的,当然了,此服务器不应该再报
#S&d$_+v VO;d B\0告出错信息的错误。一种阻止这种出错报告循环的情况是在信号的邮件命令的回
_H J}+ZeK0复路径上置空。在传送此信息时,允许将回复路径也置为空。一个MAIL命令后的
i3bv,N6p7|'zDV0回复路径为空表现为如下形式:
0e*X2}+} W C1Z0  MAIL FROM:<>51Testing软件测试网 oS+bE.e7T%c
51Testing软件测试网!g5BuX$z"i i&`(r%m.U
  下例中显示了不可传送的邮件信息。此信息是对从HOSTW上的JOE发出的邮件51Testing软件测试网w.E.lN{,]1d
经过在HOSTX需要经过HOSTZ到达HOSTY时出错的回应。我们看到的例子是在HOSTX
6Y)^ B+LlS~B ]2Zyl0和HOSTY之间发生的。
GY!s@`"me~f0
yLgM7O#u7B#^U4J(Z0  不可传送邮件信息的例子
M@X(d q0  S: MAIL FROM:<>
+bx ~ dn+UaG}O0  R: 250 ok
yj-@ yKap0  S: RCPT TO:<@HOSTX.ARPA:JOE@HOSTW.ARPA>51Testing软件测试网 |G'q@m5x QM
  R: 250 ok
%WQ%p A.fadt0  S: DATA51Testing软件测试网eO;W&yDl3Kg
  R: 354 send the mail data, end with .51Testing软件测试网Yn9J0GIXU+O#K
  S: Date: 23 Oct 81 11:22:3351Testing软件测试网)q6k8k1Ym.l
  S: From: SMTP@HOSTY.ARPA
.Sorj5f:C0  S: To: JOE@HOSTW.ARPA
HT3{2s#kPh8c0  S: Subject: Mail System Problem
3n.?ddn0  S:51Testing软件测试网1pex |MC5w0h
  S: Sorry JOE, your message to SAM@HOSTZ.ARPA lost.51Testing软件测试网uD9gdf?'K%r
  S: HOSTZ.ARPA said this:
3lSHq"[&~u0  S: "550 No Such User"
8[H!H1I!Y"u0  S: .
9J%f;E@!H0uK.c0  R: 250 ok51Testing软件测试网0D'C#` O$}kc

-iKC)H/UB\l0 3.7. 域  51Testing软件测试网 Tvm+vTc7Rj@
  域是最近被引入ARPA Internet邮件系统的。使用域可以使地址空间从一
~#UbN;u8@M0个平面的普通字符串主机名变成全局地址的一个层次结构。主机由一个域名取51Testing软件测试网5_ zT~"I[XfSA
代,起始主机是由一系列元串组成,它们由逗号按最特殊到一般的顺序排列。
|j2g3s3z*n%e U0  例如,"USC-ISIF.ARPA","Fred.Cambridge.UK"和"PC7.LCS.MIT.ARPA"可51Testing软件测试网O p6HG7O,?@P$`8x@'{
能是主机-域标识符。51Testing软件测试网z^C%Fz(n(~ H
  无论域名在SMTP中如何使用,只有正式的名称才可以被使用,不可以使用
iy:A0H!mU0假名或昵称。
u9~-?%GJ`_F0
)k'Q yx"Kxl03.8. 改变角色51Testing软件测试网.G;^z0Y#~Y
  TURN命令可以用来改变在传输信道上通信的程序的角色。如果程序A现在是
5z"LM6n b Q0发送SMTP,它发送TURN命令并接到OK应答(250)后,它就变为接收SMTP了。同51Testing软件测试网y C~[9pP9QY
理,程序B也可以从接收SMTP变为发送SMTP。若要拒绝改变角色,接收方可以发
h/eo/i#Od [0V0送502作为应答。51Testing软件测试网C6ngihV
  注意:此命令是可选的。在使用TCP的传输信道时,一般不使用此命令。然
{Q8@-NG(m6J8V K6K0而,当建立传输信道的代价比较大时,此命令很有用。例如,此命令可以支持一51Testing软件测试网xW.J6S2t])D3_y
般公共交换电话系统作为传输信道。51Testing软件测试网kV'q&q(l)?*T6f&\ Y'k

7|3cY/Z6`!xm6{O04. SMTP说明  51Testing软件测试网Sg4C)BN)VD$v
4.1. SMTP命令  51Testing软件测试网] F!^&sG;pO2F
4.1.1. 命令语法  
)E2Z:g#H!n&Z8S x0  SMTP命令定义了邮件传输或由用户定义的系统功能。它的命令是由<CRLF>
nO)k+P5E5t0结束的字符串。而在带有参数的情况下,命令本身由<SP>和参数分开,如果
#b4TuFNh^5n0未带参数可以直接和<CRLF>连接。邮箱的语法格式必须和接收站点的格式一致。
,c/v ybc"j0下面讨论SMTP命令和应答。51Testing软件测试网s._5eQF ]
  发送邮件操作涉及到不同的数据对象,它们由不同的参数相互连接。回
xZ"z)s-N.?;l!f l0复路径就是MAIL命令的参数,而转发路径则是RCPT命令的参数,邮件日期是51Testing软件测试网 e$M0}#`!u1`%q1G}p
DATA命令的参数。这些参数或者数据对象必须跟在命令后。这种模式也就要
yn$L'w$Dr IS0求有不同的缓冲区来存储这些对象,也就是说,有一个回复路径缓冲区,一51Testing软件测试网D;TR;}~M"m#p)a f0L
个转发路径缓冲区,一个邮件内容缓冲区。特定的命令产生自己的缓冲区,
[] ESnXO0或使一个或多个缓冲的内容被清除。
!\X6r-[H051Testing软件测试网SM N,g,jqk
  HELLO (HELO)51Testing软件测试网7}D(FsD^H*s,|
  此命令用于向接收SMTP确认发送SMTP。参数域包括发送SMTP的主机名。51Testing软件测试网9iB q x0x-[&Q
接收SMTP通过连接确认命令来向发送SMTP确认接收SMTP。引命令和OK响应确
J-i0@,{Do [4A}0认发送和接收SMTP进入了初始状态,也就是说,没有操作正在执行,所有状态51Testing软件测试网]TY8s%?!J3Y|d
表和缓冲区已经被子清除。
|rfj/oZ)Nj Z0
*d%NB(Sy6u&H}9@M0  MAIL (MAIL)  51Testing软件测试网\WKm?BS2U/[4N
  此命令用于开始将邮件发送到一个多个邮箱中。参数域包括回复路径。51Testing软件测试网7ED"IS*xw
返回路径中包括了可选的主机和发送者邮箱列表。当有主机列表时,它是一
}I5\8^2@,M|2H0个回复路径源,它说明此邮箱是由在表中的主机一一传递发送(第一个主机
Y2BGmy A0是最后一个接收到此邮件的主机)过来的。此表也有作向发送者返回非传递信51Testing软件测试网iU ^z0\K6Q3]7f
号的源路径。因为每个传递主机地址都被加在此表起始处,它就必须使用发送51Testing软件测试网8~.S!{-qB Y:m
IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信51Testing软件测试网]&Rvz"x
息的回复路径可能就是空的。
F%FZ(Py6Hjl)~5_0  此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将51Testing软件测试网7C sA"dMo$WE2Z
此命令的回复路径信息插入到回复路径缓冲区中。51Testing软件测试网{/cF |vQV
  RECIPIENT (RCPT)
%rY/G Q8pRK!J0  此命令用于确定邮件内容的唯一接收者;多个接收者将由多个此命令指定。51Testing软件测试网 P-A\ Qs$J*E(kW5X
转发路径中包括一个可选的主机和一个必须的目的邮箱。当出现主机列表时,51Testing软件测试网(r CU'Gr0U)J*L;M+v
这就是一个源路径,它指明邮件必须向列表中的上一个主机发送。如果接收51Testing软件测试网)pC\w:{
SMTP未实现邮件的传递发送,就会返回如未知本地用户(550)的信息给用户。51Testing软件测试网y(Y%m4G1u"gQ
  当邮件被传递发送时,传递主机必须将自己的名称由转发路径的开始处51Testing软件测试网'F1G/] n']M
移至回复路径的结束处。当邮件最终到达目的地时,接收SMTP将以它的主机邮
Dgm-lO}j Ug9{1I0件格式自己的名称插入目标邮件中。例如,由传递主机A接收的带有如下参51Testing软件测试网-p'{-joD&mR/n |
数的邮件时,
+k^GC w/g|;T0  FROM:<USERX@HOSTY.ARPA>
#t&P%sN6b0  TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA>51Testing软件测试网'Vty fZDT
  将会变成如下形式:
(`#J8e+Kv0  FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA>51Testing软件测试网moI2s1F0bLf1\
  TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.51Testing软件测试网5j#a+HJ H
  此命令导致它的转发路径参数加入转发路径缓冲区中。51Testing软件测试网)JWl Lx5{

c4? WL[ yx3|\(A$n0  DATA (DATA)51Testing软件测试网J |n%M ^#Q(HP&A0L"n
  接收者将跟在命令后的行作为邮件内容。此命令导致此命令后的邮件内容51Testing软件测试网 csRxK um$m
加入邮件内容缓冲区。邮件内容可以包括所有128个ASCII码字符。邮件内容由只
.YB,g+C,Bzp0包括一个句号的行结束,也就是如下的字符序列:"<CRLF>.<CRLF>",它指示了51Testing软件测试网N/cD D6O7G]9v
邮件的结束。
#d|3m&bYI][0  邮件内容的结束指示要求接收者现在就处理保存的邮件内容。此过程将回复
-H3B1i?$CU!B!id0路径缓冲区,转发路径缓冲区和邮件内容缓冲区的内容全部清空。如果操作成功,51Testing软件测试网%k)P?&M+v/KrOV
接收者必须返回OK应答;如果失败也必须返回失败应答。
G$a,|jd0Yh0  当接收SMTP收到一条信息时,无论是用作转发还是此邮件已经到达目的地,51Testing软件测试网6g.Ja~rS [Y'_
它都必须在邮件内容的开始处加上时间戳这一行,这一行指示了接收到邮件主51Testing软件测试网5nI} h4wm qP
机和发出此邮件主机的标识,以及接收到邮件内容的时间和日期。转发的信件51Testing软件测试网` w2v6M8Gx1xX
将有多行这样的时间戳。当接收SMTP作最后一站的传送时,它将返回路径信息51Testing软件测试网UN&pC!@ PV)TU$I
行插入邮件中。此行包括了发送命令中的<reverse-path>的信息。在这里,最51Testing软件测试网3s@*Ba:M
后一站的传送的意思是邮件将被送到目的用户手中,但在一些情况下,邮件可
6Tu5a$}9W2_q`0能需要更进一步的加工并由另外的邮件系统传送。51Testing软件测试网J Bh*FX5hv6h
  可能在返回路径中的邮箱与实际发送的邮件不一致,这个情况可能发生在51Testing软件测试网:u1Fi WX&Hv*l
需要传送一个特定的错误处理信箱而不是信件发送者那里。上面所述说明了,
9[)PZ'D4A%h$}0最后的邮件内容由一个返回路径行,和在其后的一个或多个时间戳行构成。这51Testing软件测试网7D]'aBjr \
些行后面是邮件内容的头和体信息。51Testing软件测试网Xs6o0W9o
  当处理后面的邮件数据指示部分成功时就需要特定的说明。这种情况可能51Testing软件测试网^ h M5ot9l^o'L
发生在发送SMTP发现当邮件需要传送给多个用户时,只能够成功地向其中的一
W+b*fY.H0Me W0部分发送信息这种情况下。在这种情况下,必须对DATA命令发送OK应答,而接51Testing软件测试网to]M&B$d
收SMTP组织并发送一个"不可传递邮件"信息到信息的发送者。在此信息中或者51Testing软件测试网@_:oI1DC`
发送一个不成功接收者的列表,或者每次发送一个不成接收者,而发送多次。
X'ME%ji^0所有不可传递邮件信息由MAIL命令发送。51Testing软件测试网,s8nc&s0g#K)Nh

hyq T7i0  返回路径和接收时间戳例子
I*F&qG k0LU\0  Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA>51Testing软件测试网c"Nf$[S a
  Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST
p5P7m-{e0  Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST51Testing软件测试网h8Z]M WwY
  Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST
;q5` iX\#_$s2y({-Q0  Date: 27 Oct 81 15:01:01 PST  51Testing软件测试网1oJ VrsL0Kd
  From: JOE@ABC.ARPA  
a*P)Y p reaJ+w(k g0  Subject: Improved Mailing System Installed  
Mg;fmh]0  To: SAM@JKL.ARPA  
.^+ZRjPb;]C0
:j-uhoV9`+k0XU4{d0  This is to inform you that ...  51Testing软件测试网}4GY9r5l8Y Y's

+DAE Gy0a Kb\051Testing软件测试网`~7}6H?
  SEND (SEND)
(P/w$Y ed(k0  此命令用于开始一个发送命令,将邮件发送到一个或多个终端上。参数51Testing软件测试网\5Q}'f2C3^RS
域包括了一个回复路径,此命令如果成功就将邮件发送到终端上了。  
d3J:xK?0  回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,
7t$x^R6J Uq0表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的51Testing软件测试网|A v-e.JT
(列表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。51Testing软件测试网\1v0Hc-E^
因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接
zL(Q!c7z9`"U0收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径
3k6A Z`;o"U+P)fmD0可能就是空的。
F,OK.\J9^T]0  此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将51Testing软件测试网*t+X7N-NM
此命令的回复路径信息插入到回复路径缓冲区中。51Testing软件测试网9f.]L1\*L

0u6G` g#S}W*t0  SEND OR MAIL (SOML)
(fM4T4}YT0  此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,或者
0v$V Z yP2b+@0传送到邮箱中。对于每个接收者,如果接收者终端打开,邮件内容将被传送到51Testing软件测试网PZT0U,abIp
接收者的终端上,否则就送到接收者的邮箱中。参数域包括回复路径,如果成
1O qU1Uhd S0功地将信息送到终端或邮箱中此命令成功。
9A!iFh*nP r]0  回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表51Testing软件测试网"}&R+t2I0v8dF
示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列
c kI5\q|e5z0表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。因51Testing软件测试网 fq&v!k"G0I$i{YP
为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收51Testing软件测试网v4v#W%Bl/fq3D
IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可51Testing软件测试网[!yeS p~YnA[dO
能就是空的。
`t K)uW7c mdpb$A0  此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将51Testing软件测试网&}Dni4@/Wj(R
此命令的回复路径信息插入到回复路径缓冲区中。51Testing软件测试网&NqS0E1VgV

8n3ag-\L.|0  SEND AND MAIL (SAML)
)A8@r\vR,A0  此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,并传51Testing软件测试网9li3ipOQmUOzx
送到邮箱中。如果接收者终端打开,邮件内容将被传送到接收者的终端上和接
`-evs4d;S!U [ ^0收者的邮箱中。参数域包括回复路径,如果成功地将信息送到邮箱中此命令成51Testing软件测试网#A!Cka,V
功。
4vy*FQ(oe8i zD0  回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表51Testing软件测试网vP'k m0C9ta;P
示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列51Testing软件测试网$zL8KsWp(T
表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。因51Testing软件测试网9ch8n/p&u:F
为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收
Wt3l8_H+nH"OM0IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可51Testing软件测试网Ije3k b1]4p
能就是空的。
;n Y+E5X/a~5Nv2UY0  此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将51Testing软件测试网Ss}f*|jQ\
此命令的回复路径信息插入到回复路径缓冲区中。51Testing软件测试网+b'F~%`iHCm;d
51Testing软件测试网r:Qa1r/xT
  RESET (RSET)
xMN)Z2~X m9tH1Y"R0  此命令指示当送邮件操作将被放弃。任何保存的发送者,接收者和邮件内51Testing软件测试网2c.VI7C f;]
容应该被抛弃,所有缓冲区和状态表应该被清除,接收方必须返回OK应答。
9G1TA/Nv+|,HP0
5W_,_)?[~(m"y0  VERIFY (VRFY)51Testing软件测试网$l:sDi;mb o1Vw1Q
  此命令要求接收者确认参数是一个用户。如果这是(已经知道的)用户名,
't^ VjFJ_'x0返回用户的全名和指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮51Testing软件测试网'wl6m|!Hs
件内容缓冲区没有影响。
JN#Y/c+N X%FAzM'VS0
*gKHz8{ S0  EXPAND (EXPN)51Testing软件测试网x#l@2^Ur
  此命令要求接收者确认参数指定了一个邮件发送列表,如果是一个邮件发送51Testing软件测试网?qh|9\@1g
列表,就返回表中的成员。如果这是(已经知道的)用户名,返回用户的全名和51Testing软件测试网+? \$REaO'u
指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有
NgPwZ0影响。51Testing软件测试网}0z8b.k|-J-j+fRoV0K0H

r?Y BLS;V"}0  HELP (HELP)
1|/wU sGnY*E0  此命令导致接收者向HELP命令的发送者发出帮助信息。此命令可以带参数,
!Q8Zm!LvG0并返回特定的信息作为应答。此命令对回复路径缓冲区,转发路径缓冲区和邮件51Testing软件测试网{,B8k)FE
内容缓冲区没有影响。
"yO&y ajQz051Testing软件测试网Z CI.~0X
  NOOP (NOOP)  51Testing软件测试网Q L Jn}SY4me
  此命令不影响任何参数和已经发出的命令。它只是说明没有任何操作而不是51Testing软件测试网-^b7PZ5Jg3|G*B
说明接收者发送了一个OK应答。此命令对回复路径缓冲区,转发路径缓冲区和邮
L A8D`*l6K4g0件内容缓冲区没有影响。
T c/\!a7b*j@ j-i051Testing软件测试网7K4lH7WIk
  QUIT (QUIT)51Testing软件测试网8c zx L'm
  此命令指示接收方必须发送OK应答然后关闭传送信道。接收方在接到QUIT命51Testing软件测试网0CCF@-F"O3R
令并做出响应之前不应该关闭通信信道。发送方在发送QUIT命令和接收到响应之
yq6Qp-I ST0前也不应该关闭信道。即使出错,也不应该关闭信道。如果连接被提前关闭,接51Testing软件测试网0_Ys]kw K
收方应该象接收到RSET命令一样,取消所有等待的操作,但不恢复原先已经做过51Testing软件测试网O3\0OFnS;K \B
的操作。而发送方应该象接收到暂时错误(4XX)一样假定命令和操作仍在支持51Testing软件测试网4}Z~a I3d,GL
之中。
/x_D7_1fv3t2@0
a)iNp)^?0  TURN (TURN)
'i)R+y;O-b`rIuB0  此命令指定接收方要么发送OK应答并改变角色为发送SMTP,要么发送拒绝信51Testing软件测试网1z1u2C)H jE
息并保持自己的角色。如果程序A现在是发送SMTP,它发出TURN命令后接收到
1z I |j7nz(`0OK(250)应答,它就变成了接收SMTP。程序A就进入初始状态,好象通信信道刚51Testing软件测试网%f?5vP gP%u/D Y
打开一样,这时它发送220准备好服务信号。如果程序B现在是接收SMTP,它发51Testing软件测试网$BL9XB`2T
出TURN命令后接收到OK(250)应答,它就变成了发送SMTP。程序A就进入初始状51Testing软件测试网'JO#f_!_%y%d(]?uF
态,好象通信信道刚打开一样,这时它准备接收220准备好服务信号。
0lGCOpEB0若要拒绝改变角色,接收方可以发送502应答。
ti1i(h _;gC nW2q0  对于这些命令的顺序有一定的限制。对话的第一个命令必须是HELLO命令,
;B d9eM-Jb{:[&z)pn0此命令在此后的会话中也可以使用。如果HELLO命令的参数不可接受,必须由返
$i/n }yE d{e0回一个501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。  51Testing软件测试网*HgA&g5p7i GP
NOOP,HELP,EXPN和VRFY命令可以在会话的任何时候使用。MAIL,SEND,SOML或51Testing软件测试网}+Np;kU#nG.mb
SAML命令开始一个邮件操作。一旦开始了以后就要发送RCPT和DATA命令。邮件操
@P"Q(h bj,}5o0作可以由RSET命令终止。在一个会话中可以有一个或多个操作。
mw0b:P j(Y+QU`V0  如果在操作开始参数不可接受,必须返回501失败应答,同时接收到的SMTP51Testing软件测试网7G~z+FWP
必须保持在与刚才一致的状态下。如果操作中的命令顺序出错,必须返回503失51Testing软件测试网X7Fk Lw)hc0?xL
败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。
tu3[*p%Fw@0会话的最后一个命令必须是QUIT命令。此命令在会话的其它时间不能使用。
*]4Nj*Qh_*r-h1OF051Testing软件测试网%M'G Jpgd


TAG: 网络知识

 

评分:0

我来说两句

Open Toolbar