当前位置:文档之家› SMTP协议RFC文档中文版

SMTP协议RFC文档中文版

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

(RFC821 SIMPLE MAIL TRANSFER PROTOCOL)

目录

1. 介绍 2

2. SMTP模型 3

3. SMTP过程 4

3.1. MAIL 4

3.2. 转发 5

3.3. 确认和扩展 6

3.4. 发送信件(mailing)和获得信件(sending) 7 3.5. 打开和关闭7

3.6. 转发 8

3.7. 域9

3.8. 改变角色9

4. SMTP说明9

4.1. SMTP命令9

4.1.1. 命令语法9

4.1.2. COMMAND语法格式13

4.2. SMTP响应15

4.3. 命令和应答序列16

4.4. 状态图17

4.5. 详细内容18

4.5.1. 最小实现18

4.5.2. 透明性19

4.5.3. 大小19

附录 A TCP传输服务19

附录 B NCP传输服务20

附录 C NITS 20

附录 D X.25传输服务 20

附录 E 应答码构成方法20

附录 F 一些例子22

参考资料36

1. 介绍

简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用的术语。

SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。

2. SMTP模型

SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。

一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK

应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。

SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个传送服务下时,通过中继SMTP服务器传送。为了能够对SMTP服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。

MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转发路径的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径(它用于发生错误时返回邮件)。

当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一个数字代码。在下面,例子中可以看到哪些使用实际的命令和应答。完整的命令和应答在第四节。

命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的。这样SMTP实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不敏感。

命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7位字符正确传送,而最高位被填充为0。当指定一般的命令或应答格式后,参数会由一些类似于语言的字符串表示出来,如""或"",这里尖括号表示这是一种类似于语言的变量。

3. SMTP过程

本节提供了SMTP中的一些过程。头一个说明的是基本发送过程(定义为发送操作)。下来描述向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终端和打开关闭交换。在本节的最后是对中断,邮件域的说明。本节的例子只是一部分命令和应答的序列,完整的例子见附录F。

3.1. MAIL

在SMTP发送操作中有三步,操作由MAIL命令开始给出发送者标识。一系列或更多的RCPT命令紧跟其后,给出了接收者信息,然后是DATA命令列出发送的邮件内容,最后邮件内容指示符确认操作。

过程中的第一步是MAIL命令,< reverse-path >包括源邮箱。

MAIL FROM:

此命令告诉接收者新的发送操作已经开始,请复位所有状态表和缓冲区。它给出反向路径以进行错误信息返回。如果请求被接收,接收方返回一个250 OK应答。中不止包括了邮箱,它包括了主机和源邮箱的反向路由,其中的第一个主机就是发送此命令的主机。

过程中的第二步是发送RCPT命令。

RCPT TO:

此命令给出向前路径标识接收者,如果命令被接收,接收方返回一个250 OK应答,并存储向前路径。如果接收者未知,接收方会返回一个550 Failure应答。此过程可能会重复若干次。

不仅包括邮件,它是主机和目的邮箱的路由表,在其中的第一个主机就是接收命令的主机。过程中的第三步是发送DATA命令。

DATA

如果命令被接收,接收方返回一个354 Intermediate应答,并认定以下的各行都是信件内容。当信件结尾收到并存储后,接收者发送一个250 OK应答。因为邮件是在传送通道上发送,因此必须指明邮件内容结尾,以便应答对话可以重新开始。SMTP通过在最后一行仅发送一个句号来表示邮件内容的结束,在接收方,一个对用户透明的过程将此符号过滤掉,以不影响正常的数据。

注意:邮件内容包括如下提示:Date, Subject, To, Cc, From。

邮件内容指示符确认邮件操作并告知接收者可以存储和再发送数据了。如果此命令被接收,接收方返回一个250 OK应答。DATA命令仅在邮件操作未完成或源无效的情况下失败。

上面所述的过程是一个发送操作。这些命令只能以上面的顺序使用。下例表示了在一个发送操作中这些命令的使用。

SMTP过程例子此例是在Alpha.ARPA主机的Smith发送邮件给Beta.ARPA主机的Jones,Green和Brown 的,这里假定主机Alpha与主机Beta直接相连。

S: MAIL FROM:

R: 250 OK

S: RCPT TO:

R: 250 OK

S: RCPT TO:

R: 550 No such user here

S: RCPT TO:

R: 250 OK

S: DATA

R: 354 Start mail input; end with .

S: Blah blah blah...

S: ...等等

S: .

R: 250 OK

此信被前两个人接收,而第三个人在此主机上没有邮箱。

3.2. 转发

下面是一些中目的地址不正确的,但接收者知道正确的目的地址的例子。在这些例子中,下列应答之一应该允许发送方与获得正确地址。

251:用户不在本地;将向前发送到

这个应答意味着,接收方SMTP知道用户的邮箱在另外的主机上,而且意味着将在未来使用正确的转向路径。请注意,主机或者用户,或者它们两者是不同的。接收方负责传送消息。

551 :用户非本地,请尝试

这个应答意味着接收SMTP知道用户的邮箱在另外的主机上,并意味着使用了正确的转发路径。注意请注意,主机或者用户,或者它们两者是不同的。接收方拒绝接收此用户的信件,发送者必须根据提供的信息重新发送或者向原发送者返回错误信息。下例显示了这些响应的应用。

转发的例子

S: RCPT TO:

R: 251 User not local; will forward to

或者

S: RCPT TO:

R: 551 User not local; please try

3.3. 确认和扩展

SMTP提供了另外的确认用户名和扩展邮件列表的功能。这些功能由VREF和EXPN命令完成,它们都以字符串为参数。对于VREF命令,字符串参数指的是用户名,对此命令的响应要包括用户的命名和用户的邮箱。对于EXPN命令,字符串参数指的是邮件列表,对此命令的响应多于一个,它们要包括所有列表中用户的命名和他们的邮箱。

“用户名”是一个多余的项目,它是故意被加上的。如果主机采用VREF命令和EXPN命令,最后本地邮箱必须提供用户名使它被主机确认。如果主机选择由另外的字符串作为用户名,也是允许的。

在一些主机中,邮箱列表和一个邮箱的代名有一点不清楚,因为一般的数据结构可能包括两种类型的入口。如果要发出对邮件列表的确认,应该给出确定响应。在接收到这个消息后,主机将把邮件传送到列表上所有的地址上去,如果没有接收到确定响应,就会报告错误。例如,"550 That is a mail list, not a user name"。如果请求用于扩展一个用户名,可能通过返回包括一个名字的列表来形成确定响应,如果没有接收到确定响应,就会报告错误。(例如, "550 That is a user name, not a mailing list")。

在多个响应的情况下(通常是对于EXPN而言的),每个应答指定一个邮箱。在模糊请求的情况下,例如"VRFY Smith",这里两个Smith的响应必须是"553 User ambiguous"。

确认用户名的情况如下例所示:例3:

确认用户名

S: VRFY Smith R: 250 Fred Smith

或者

S: VRFY Smith

R: 251 User not local; will forward to

或者

S: VRFY Jones

R: 550 String does not match anything.

或者

S: VRFY Jones

R: 551 User not local; please try

或者

S: VRFY Gourzenkyinplatz

R: 553 User ambiguous.

邮箱列表要求多个响应的情况如下例所示:

S: EXPN Example-People

R: 250-Jon Postel

R: 250-Fred Fonebone

R: 250-Sam Q. Smith

R: 250-Quincy Smith <@USC-ISIF.ARPA:Q-Smith@ISI-VAXA.ARPA>

R: 250-

R: 250

或者

S: EXPN Executive-Washroom-List

R: 550 Access Denied to You.

VERF和EXPN命令的字符串命令参数因为具体实现的不同而不能再加以限制了。在一些系统上,EXPN命令的参数可能是一个包含邮件列表的文件名,但是在Internet上有许多不同的文件结构。

VRFY和EXPN命令在最小实现中并不包括,当它们实现时,它们也不要求被在传送间实现。

3.4. 发送信件(mailing)和获得信件(sending)

SMTP的主要目的是将邮件发送到用户的邮箱中。由一些主机提供的类似的功能是把邮件送至用户的终端(如果用户正打开终端)。将邮件送到用户的邮箱中称为发送信件(mailing);而送至用户终端则称之为获得信件(sending)。因为在一些主机上,这两者的实现十分类似,所以它们同时被放入了SMTP中。然而,获得信件命令在SMTP的最小实现中是没有的。用户应该具有控制向终端上写信息的能力。大部分主机允许用户接受或者拒绝类似的信息。

下面三个命令被定义来支持获得信件。它们被用于邮件命令而不是MAIL命令,指示接收SMTP这种操作的特殊意义:

SEND FROM:

SEND命令要求邮件内容直接传送到用户终端。如果用户未打开终端(或者未接收终端信息),450响应将返回一个RCPT命令。如果信息被成功发送,此操作成功。

SOML FROM:

Send或者MaiL命令要求将邮件内容直接发送到用户的终端上(如果用户在终端上)。如果用户不在终端上,邮件内容直接进入邮箱。如果邮件被发送到用户终端或者用户信箱,发送操作成功。

SAML FROM:

Send和MaiL命令要求邮件内容直接发送到用户终端上(如果用户在终端上)。不管怎么样,信件都会进入信箱。如果信件进入信箱,发送操作成功。

用于MAIL命令的响应和这些命令的响应相同。

3.5. 打开和关闭

当打开传送通道时,要交换一些信息以确定双方的身份。以下的命令是用于打开和关闭的:

HELO

QUIT

在HELLO命令中,主机自己发送命令,此命令可以被解释为:“你好,我是XX"。

打开联结的例子

R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready

S: HELO USC-ISIF.ARPA

R: 250 BBN-UNIX.ARPA

关闭联结的例子

S: QUIT

R: 221 BBN-UNIX.ARPA Service closing transmission channel

3.6. 转发

转发路径可能是如下格式:"@ONE,@TWO:JOE@THREE",在这里,ONE,TWO和THREE是主机。这种格式用于强调地址和路径的区别。邮箱是绝对地址,路径是关于如何到达的信息。这两个概念不应该被混淆。

概念上,转发路径的元素被移动到回复路径作为从一个SMTP服务器到另一个SMTP服务器的信息。回复路径是一个反向数据源路径,例如从当前信息的位置到发起者的位置。当一个SMTP服务器从转发路径中删除自己的标记并将它插入到回复路径中时,它必须使用它发送环境能够理解的名称来进行,以防它的名称在不同的环境中被理解为不同的名字。

如果当SMTP接收到信息的转发路径的第一个元素不是此SMTP的标记时,此元素不从转发路径中删除,而被用来决定下一个应该发送到的SMTP服务器。在任何情况下,SMTP都将自己的标记加入反向路径中。

使用源路径时,接收SMTP接收转发的邮件并发送到另一接收SMTP服务器上。接收服务器可以接受或拒绝转发本地用户的邮件。接收SMTP通过将它自己的标记从转发路径移至回复路径的开始处来改变命令参数。这时,接收SMTP变成了发送SMTP,也就建立了到下一个转发路径中SMTP的通道,然后,它向这个SMTP发送邮件。

在回复路径上的头一个主机应是发送SMTP命令的主机,在转发路径上第一个主机应是接收SMTP命令的主机。

注意:转发路径和回复路径出现在SMTP命令和应答中,但不一定要出现在信息中。也就是说,没有必须要这样的路径特别这种格式出现在信息头的"To:","From:"和"CC:"等域中。

如果SMTP服务器接受了转发任务,但后来它发现因为转发路径不正确或者其它原理无法发送邮件,它必须建立一"undeliverable mail"信号,将它此信号送到此信的发主者那里。

此信号必须是从此主机的SMTP服务上发出的,当然了,此服务器不应该再报告出错信息的错误。一种阻止这种出错报告循环的情况是在信号的邮件命令的回复路径上置空。在传送此信息时,允许将回复路径也置为空。一个MAIL命令后的回复路径为空表现为如下形式:

MAIL FROM:<>

下例中显示了不可传送的邮件信息。此信息是对从HOSTW上的JOE发出的邮件经过在HOSTX需要经过HOSTZ到达HOSTY时出错的回应。我们看到的例子是在HOSTX和HOSTY之间发生的。

不可传送邮件信息的例子

S: MAIL FROM:<>

R: 250 ok

S: RCPT TO:<@HOSTX.ARPA:JOE@HOSTW.ARPA>

R: 250 ok

S: DATA

R: 354 send the mail data, end with .

S: Date: 23 Oct 81 11:22:33

S: From: SMTP@HOSTY.ARPA

S: To: JOE@HOSTW.ARPA

S: Subject: Mail System Problem

S:

S: Sorry JOE, your message to SAM@HOSTZ.ARPA lost.

S: HOSTZ.ARPA said this:

S: "550 No Such User"

S: .

R: 250 ok

3.7. 域

域是最近被引入ARPA Internet邮件系统的。使用域可以使地址空间从一个平面的普通字符串主机名变成全局地址的一个层次结构。主机由一个域名取代,起始主机是由一系列元串组成,它们由逗号按最特殊到一般的顺序排列。

例如,"USC-ISIF.ARPA","http://biz.doczj.com/doc/519482946.html,"和"PC7.LCS.MIT.ARPA"可能是主机-域标识符。

无论域名在SMTP中如何使用,只有正式的名称才可以被使用,不可以使用假名或昵称。

3.8. 改变角色

TURN命令可以用来改变在传输信道上通信的程序的角色。如果程序A现在是发送SMTP,它发送TURN命令并接到OK应答(250)后,它就变为接收SMTP了。同理,程序B也可以从接收SMTP变为发送SMTP。若要拒绝改变角色,接收方可以发送502作为应答。

注意:此命令是可选的。在使用TCP的传输信道时,一般不使用此命令。然而,当建立传输信道的代价比较大时,此命令很有用。例如,此命令可以支持一般公共交换电话系统作为传输信道。

4. SMTP说明

4.1. SMTP命令

4.1.1. 命令语法

SMTP命令定义了邮件传输或由用户定义的系统功能。它的命令是由结束的字符串。而在带有参数的情况下,命令本身由和参数分开,如果未带参数可以直接和连接。邮箱的语法格式必须和接收站点的格式一致。下面讨论SMTP命令和应答。

发送邮件操作涉及到不同的数据对象,它们由不同的参数相互连接。回复路径就是MAIL命令的参数,而转发路径则是RCPT命令的参数,邮件日期是DATA命令的参数。这些参数或者数据对象必须跟在命令后。这种模式也就要求有不同的缓冲区来存储这些对象,也就是说,有一个回复路径缓冲区,一个转发路径缓冲区,一个邮件内容缓冲区。特定的命令产生自己的缓冲区,或使一个或多个缓冲的内容被清除。

HELLO (HELO)

此命令用于向接收SMTP确认发送SMTP。参数域包括发送SMTP的主机名。接收SMTP通过连接确认命令来向发送SMTP确认接收SMTP。引命令和OK响应确认发送和接收SMTP进入了初始状态,也就是说,没有操作正在执行,所有状态表和缓冲区已经被子清除。

MAIL (MAIL)

此命令用于开始将邮件发送到一个多个邮箱中。参数域包括回复路径。返回路径中包括了可选的主机和发送者邮箱列表。当有主机列表时,它是一个回复路径源,它说明此邮箱是由在表中的主机一一传递发送(第一个主机是最后一个接收到此邮件的主机)过来的。此表也有作向发送者返回非传递信号的源路径。因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可能就是空的。

此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。

RECIPIENT (RCPT)

此命令用于确定邮件内容的唯一接收者;多个接收者将由多个此命令指定。转发路径中包括一个可选的主机和一个必须的目的邮箱。当出现主机列表时,这就是一个源路径,它指明邮件必须向列表中的上一个主机发送。如果接收SMTP未实现邮件的传递发送,就会返回如未知本地用户(550)的信息给用户。

当邮件被传递发送时,传递主机必须将自己的名称由转发路径的开始处移至回复路径的结束处。当邮件最终到达目的地时,接收SMTP将以它的主机邮件格式自己的名称插入目标邮件中。例如,由传递主机A接收的带有如下参数的邮件时,

FROM:

TO:<@HOSTA.ARPA,@HOSTB.ARPA:USERC@HOSTD.ARPA>

将会变成如下形式:

FROM:<@HOSTA.ARPA:USERX@HOSTY.ARPA>

TO:<@HOSTB.ARPA:USERC@HOSTD.ARPA>.

此命令导致它的转发路径参数加入转发路径缓冲区中。

DATA (DATA)

接收者将跟在命令后的行作为邮件内容。此命令导致此命令后的邮件内容加入邮件内容缓冲区。邮件内容可以包括所有128个ASCII码字符。邮件内容由只包括一个句号的行结束,也就是如下的字符序列:

".",它指示了邮件的结束。

邮件内容的结束指示要求接收者现在就处理保存的邮件内容。此过程将回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区的内容全部清空。如果操作成功,接收者必须返回OK应答;如果失败也必须返回失败应答。

当接收SMTP收到一条信息时,无论是用作转发还是此邮件已经到达目的地,它都必须在邮件内容的开始处加上时间戳这一行,这一行指示了接收到邮件主机和发出此邮件主机的标识,以及接收到邮件内容的时间和日期。转发的信件将有多行这样的时间戳。当接收SMTP作最后一站的传送时,它将返回路径信息行插入邮件中。此行包括了发送命令中的的信息。在这里,最后一站的传送的意思是邮件将被送到目的用户手中,但在一些情况下,邮件可能需要更进一步的加工并由另外的邮件系统传送。

可能在返回路径中的邮箱与实际发送的邮件不一致,这个情况可能发生在需要传送一个特定的错误处理信箱而不是信件发送者那里。上面所述说明了,最后的邮件内容由一个返回路径行,和在其后的一个或多个时间戳行构成。这些行后面是邮件内容的头和体信息。

当处理后面的邮件数据指示部分成功时就需要特定的说明。这种情况可能发生在发送SMTP发现当邮件需要传送给多个用户时,只能够成功地向其中的一部分发送信息这种情况下。在这种情况下,必须对DATA命令发送OK应答,而接收SMTP组织并发送一个"不可传递邮件"信息到信息的发送者。在此信息中或者发送一个不成功接收者的列表,或者每次发送一个不成接收者,而发送多次。所有不可传递邮件信息由MAIL命令发送。

返回路径和接收时间戳例子

Return-Path: <@GHI.ARPA,@DEF.ARPA,@ABC.ARPA:JOE@ABC.ARPA>

Received: from GHI.ARPA by JKL.ARPA ; 27 Oct 81 15:27:39 PST

Received: from DEF.ARPA by GHI.ARPA ; 27 Oct 81 15:15:13 PST

Received: from ABC.ARPA by DEF.ARPA ; 27 Oct 81 15:01:59 PST

Date: 27 Oct 81 15:01:01 PST

From: JOE@ABC.ARPA

Subject: Improved Mailing System Installed

To: SAM@JKL.ARPA

This is to inform you that ...

SEND (SEND)

此命令用于开始一个发送命令,将邮件发送到一个或多个终端上。参数域包括了一个回复路径,此命令如果成功就将邮件发送到终端上了。

回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可能就是空的。

此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。

SEND OR MAIL (SOML)

此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,或者传送到邮箱中。对于每个接收者,如果接收者终端打开,邮件内容将被传送到接收者的终端上,否则就送到接收者的邮箱中。参数域包括回复路径,如果成功地将信息送到终端或邮箱中此命令成功。

回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可能就是空的。

此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。

SEND AND MAIL (SAML)

此命令用于开始一个邮件操作将邮件内容传送到一个或多个终端上,并传送到邮箱中。如果接收者终端打开,邮件内容将被传送到接收者的终端上和接收者的邮箱中。参数域包括回复路径,如果成功地将信息送到邮箱中此命令成功。

回复路径包括一个可选的主机列表和发送者邮箱。当出现主机列表时,表示这是一个传送路径,邮件就是经过这个路径上的每个主机发送到这里的(列表上第一个主机是最后经手的主机)。此表用于返回非传递信号到发送者。因为每个传递主机地址都被加在此表起始处,它就必须使用发送IPCE而不是接收IPCE(如果它们不是一个IPCE的话)清楚的名称。一些出错信息的回复路径可能就是空的。

此命令清除回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区,并且将此命令的回复路径信息插入到回复路径缓冲区中。

RESET (RSET)

此命令指示当送邮件操作将被放弃。任何保存的发送者,接收者和邮件内容应该被抛弃,所有缓冲区和状态表应该被清除,接收方必须返回OK应答。

VERIFY (VRFY)

此命令要求接收者确认参数是一个用户。如果这是(已经知道的)用户名,返回用户的全名和指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。

EXPAND (EXPN)

此命令要求接收者确认参数指定了一个邮件发送列表,如果是一个邮件发送列表,就返回表中的成员。如果这是(已经知道的)用户名,返回用户的全名和指定的邮箱。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。

HELP (HELP)

此命令导致接收者向HELP命令的发送者发出帮助信息。此命令可以带参数,并返回特定的信息作为应答。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。

NOOP (NOOP)

此命令不影响任何参数和已经发出的命令。它只是说明没有任何操作而不是说明接收者发送了一个OK应答。此命令对回复路径缓冲区,转发路径缓冲区和邮件内容缓冲区没有影响。

QUIT (QUIT)

此命令指示接收方必须发送OK应答然后关闭传送信道。接收方在接到QUIT命令并做出响应之前不应该关闭通信信道。发送方在发送QUIT命令和接收到响应之前也不应该关闭信道。即使出错,也不应该关闭信道。如果连接被提前关闭,接收方应该象接收到RSET命令一样,取消所有等待的操作,但不恢复原先已经做过的操作。而发送方应该象接收到暂时错误(4XX)一样假定命令和操作仍在支持之中。

TURN (TURN)

此命令指定接收方要么发送OK应答并改变角色为发送SMTP,要么发送拒绝信息并保持自己的角色。如果程序A现在是发送SMTP,它发出TURN命令后接收到OK(250)应答,它就变成了接收SMTP。程序A就进入初始状态,好象通信信道刚打开一样,这时它发送220准备好服务信号。如果程序B现在是接收SMTP,它发出TURN命令后接收到OK(250)应答,它就变成了发送SMTP。程序A就进入初始状态,好象通信信道刚打开一样,这时它准备接收220准备好服务信号。

若要拒绝改变角色,接收方可以发送502应答。

对于这些命令的顺序有一定的限制。对话的第一个命令必须是HELLO命令,此命令在此后的会话中也可以使用。如果HELLO命令的参数不可接受,必须由返回一个501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。 NOOP,HELP,EXPN和VRFY命令可以在会话的任何时候使用。MAIL,SEND,SOML或SAML命令开始一个邮件操作。一旦开始了以后就要发送RCPT和DATA命令。邮件操作可以由RSET命令终止。在一个会话中可以有一个或多个操作。

如果在操作开始参数不可接受,必须返回501失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。如果操作中的命令顺序出错,必须返回503失败应答,同时接收到的SMTP必须保持在与刚才一致的状态下。

会话的最后一个命令必须是QUIT命令。此命令在会话的其它时间不能使用。

4.1.2. COMMAND语法格式

命令是由命令码和其后的参数域组成的。命令码是四个字母组成的,不区别大小写。因为下面的命令的作用是相同的:

MAIL Mail mail MaIl mAIl

这对于引导任何参数值的标记也是适用的,如TO和to就是一样的。命令码和参数由一个或多个空格分开。然而在回复路径和转发路径中的参数是区别大小写的。特别是在一些主机上,"smith"和"Smith"就根本不是一个用户。

参数域由不定长的字符串组成,它由结束,接收方在完全接收到此序列前不会采取任何行动。方括号代表可选的参数域。如果不选择的话,系统选择默认的设置。

下面是SMTP命令: HELO MAIL FROM:

RCPT TO:

DATA

RSET

SEND FROM:

SOML FROM:

SAML FROM:

VRFY

EXPN

HELP [ ]

NOOP

QUIT

TURN

上面参数域的格式在下面给BNF的格式给出,其中的"..."代表对于一个域的一次或多次的重复。 ::=

::=

::= "<" [ ":" ] ">"

::= | ","

::= "@"

::= | "."

::= | "#" | "[" "]"

::= "@"

::= |

::=

::= |

::= |

::= | | "-"

::= <字符串> | <字符串> "."

<字符串> ::= <字符> | <字符> <字符串>

::= """ """

::= "\" | "\" | |

<字符> ::= | "\"

::= "." "." "."

::= |

::=

::= 回车符(ASCII码13) ::= (ASCII码10)

::= 空格(ASCII码32) ::=由一个,两个或三个数字组成的介于0-255之间的数字

::= 所有A-Z的52个大小写英文字母

::= 128个ASCII字符,但不包括空格和特殊字符

::= 0-9数字

::=不包括,"或\的128个ASCII字符

::=所有128个ASCII字符

::= "<" | ">" | "(" | ")" | "[" | "]" | "\" | "." | "," | ";" | ":" | "@" """ 或控制字符

注意: "\"是一个转意字符,它表示在其后的字符代表另外的意义。例如"Joe\,Smith"用于表示单独一个由逗号分隔的用户名。主机通常由转化为地址的名称代表。注意:域的名称元素是正式的名称,不能够使用昵称或假名。

有时候名称的转变机制可能不知道主机,这就造成了通信的阻塞。为了解决这个问题,可以采取两种方法:一种方法是:在"#"后加入一个十进制数表示主机地址;另一种方法是在其后加入32位的IP地址,IP地址的形式是由句号分隔的四个介于0-255之间的十进制数。时间戳行和返回路径行的格式通常由下面定义:

::= "Return-Path:"

::= "Received:"

::= ";"

::= "FROM" <域>

::= "BY" <域>

::= [] [] [] []

::= "VIA" <连接>

::= "WITH" <协议>

::= "ID" <字符串>

::= "FOR" <路径>

<连接> ::= 在网络信息中心注册的连接的标准名称

<协议> ::= 在网络中心注册的协议的名称

::= <日> <时间>

<日期> ::= <日> <月> <年>

<时间> ::= <小时> ":" <分> ":" <秒> <时区>

::= 由一个或两个数字组成的每月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中可以看到全部的响应码。正规的情况下,响应由下面序列构成:三位的数字,,一行文本和一个,或者也可以是一个多行响应。只有EXPN和HELP命令可以导致多行应答,然而,对所有命令,多行响应都是允许的。

4.2.1. REPLY CODES BY FUNCTION GROUPS 500 格式错误,命令不可识别(此错误也包括命令行过长)

501 参数格式错误

502 命令不可实现

503 错误的命令序列

504 命令参数不可实现

211 系统状态或系统帮助响应

214 帮助信息

220 服务就绪

221 服务关闭传输信道

421 服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)

250 要求的邮件操作完成

251 用户非本地,将转发向

450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)

550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)

451 放弃要求的操作;处理过程中出错

551 用户非本地,请尝试

452 系统存储不足,要求的操作未执行

552 过量的存储分配,要求的操作未执行

553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)

354 开始邮件输入,以.结束

554 操作失败

4.3. 命令和应答序列

发送者和接收者之间的通信是一问一答的交替对话形式,由发送者控制。这样,发送发出一条命令,接收者发出一个响应。接收者在发送下一条指令前必须等应答。一个重要的应答是连接应答。在连接完成时,接收者通常会发送220"服务就绪"。发送者在继续发送指令前会等待此应答。注意:每个连接应答必须拥有服务主机的正式名称作为第一部分,其后跟响应码。例如:

220 USC-ISIF.ARPA Service ready

下面列出了成功和失败应答,这些应答必须遵守严格的次序,接收者可以不理会应答中的文本,但是由数字指定的意义和操作和命令应答序列不能更改。命令响应序列:

每个命令列出了它可能的应答。使用在可能应答前的前缀"P"表示预备的(未用在SMTP中),"I"表示中间的,"S"表示成功,"F"表示失败,"E"表示错误。如果STMP接收者必须关闭信道,可以对任何命令作出421(服务不可用,关闭传输信道)响应。此表基于下面要讲述的状态图:

CONNECTION ESTABLISHMENT(建立连接)

S: 220

F: 421

HELO

S: 250

E: 500, 501, 504, 421

MAIL

S: 250

F: 552, 451, 452

E: 500, 501, 421

RCPT S: 250, 251 F: 550, 551, 552, 553, 450, 451, 452 E: 500, 501, 503, 421

DATA

I: 354 -> data -> S: 250

F: 552, 554, 451, 452

F: 451, 554

E: 500, 501, 503, 421

RSET

S: 250

E: 500, 501, 504, 421

SEND

S: 250

F: 552, 451, 452

E: 500, 501, 502, 421

SOML

S: 250

F: 552, 451, 452

E: 500, 501, 502, 421

SAML

S: 250

F: 552, 451, 452

E: 500, 501, 502, 421

VRFY

S: 250, 251

F: 550, 551, 553

E: 500, 501, 502, 504, 421

EXPN

S: 250

F: 550

E: 500, 501, 502, 504, 421

HELP

S: 211, 214

E: 500, 501, 502, 504, 421

NOOP

S: 250

E: 500, 421

QUIT

S: 221

E: 500

TURN

S: 250

F: 502

E: 500, 503

4.4. 状态图

下面状态图是一个简单的SMTP实现,每一组命令都有一个状态图。在图中,只使用了响应码的第一位数字作为响应的代表。命令组是对每个命令建立模式然后以结构模式将命令集中起来的。对于每个命令有三种可能的应答:成功(S),失败(F)和错误(E)。在状态中,我们使用B代表开始,使用W代表等待应答。

此状态图使用了如下命令:HELO, MAIL, RCPT, RSET, SEND, SOML, SAML, VRFY, EXPN, HELP, NOOP, QUIT, TURN.

下面是对于DATA命令的更复杂的状态图:

注意:这里的邮件内容是多行的,接收者只能收到最后一行时才发出应答。

4.5. 详细内容

4.5.1. 最小实现

为使SMTP能够工作,对于接收者来说,这是最少应该实现的命令:

COMMANDS - HELO

MAIL

RCPT

DATA

RSET

NOOP

QUIT

4.5.2. 透明性

没有对数据透明性的保证,在发送类似"."结束邮件内容时会发生错误。通常,用户不关心这个"非法"序列。若要所有用户能够透明地使用必须使用以下措施:

1. 在发送邮件之间,发送SMTP必须检查邮件的每一行,如果是一个句号,就在行首再加一个句号。

2. 当邮件被接收时,接收SMTP必须检查邮件的每一行,如果发现一行仅有一个句号,邮件就此结束,如果一行中有两个句号,那么这一行中就只应该有一个句号,而将第一个句号删除。

发送的邮件内容可以包括所有128个ASCII字符。所有字符发送到收信者的邮箱,包括格式符号和其它控制字符。如果传输信道提供一个8位数据流,7位的ASCII码就可以在其中传送,而将最高位置为0。一些系统在接收和存储时需要对数据进行格式转换。对于使用不同于ASCII字符集的主机或不能以串的形式而只能以记录形式存储的主机更是如此,如果必须进行转换,必须能够再次转换回来,对于用于存储转发的主机更是如此。

4.5.3. 大小

一些对象需要最大和最小大小。也就是说,每个实现必须能够接收大于最小大小的对象,不能发送大于最大大小的对象。对于可能的最大大小,实现技术上并没有限制。

用户用户名的最大长度是64个字节。

域域的最大长度是64个字符

路径回复路径和转发路径的最大长度是256个字符

命令行命令行的最大长度,包括回车符为512个字符

应答行应答行的最大长度,包括回车符为512个字符

文本行文本行的最大长度,包括回车符和为透明性增加的字符不得超过1000个字符

接收缓冲区接收缓冲区最多可以容纳100个接收者

如果出错,应答如下:

500 行过长

501 路径过多

552 接收者过多

552 邮件内容过多

附录 A TCP传输服务

传输控制协议(TCP)在ARPA Internet中使用,并遵守网络协议的US DoD标准。SMTP传输信道连接建立在发送进程的端口U和接收进程的端口L上。一个单一的全双工信道用于传输。被指定用于此协议的服务

端口为25,也就是说L=25。TCP连接支持传输8位字节,而SMTP只需要传输7位;这样,每个8位字符的最高位被置为0。

附录 B NCP传输服务

ARPANET主机-主机协议(由网络控制程序实现)也可以用于ARPANET。SMTP传输信道连接建立在发送进程的端口U和接收进程的端口L上;其后,根据初始连接协议(ICP)建立一对简单连接。这一对简单连接被用作传输信道。此协议被指定为连接套接字25,也就是说L=25。NCP连接支持传输8位字节,而SMTP只需要传输7位;这样,每个8位字符的最高位被置为0。

附录 C NITS

也可以使用网络独立转输服务。通过在NITS在发送进程和接收进程之间建立传输信道。发送进程执行CONNECT原语,然后等待接收ACCEPT原语。NITS连接支持传输8位字节,而SMTP只需要传输7位;这样,每个8位字符的最高位被置为0。

附录 D X.25传输服务

可以直接使用公共数据网络接收的X.25服务,然而,推荐在其上使用可靠的端到端的协议如TCP。

附录 E 应答码构成方法

三位的应答码每一位都有特定的意义。每一位应答表示是否是成功的,失败的或未完成的。通过这一位,不复杂的SMTP发送就可以决定下一步的操作,如果发送方希望大概了解究竟出了什么问题,它可以检测第二位,而第三位则保存了最后更完整的信息。也就是说,从第一位到第三位,接收方可以一步比一步精确地确定接收方的状态。对于第一位有五种可能的表示代表不同的意义:

1yz 部分完成应答

命令被接受,但是要求的操作被中止,原因在应答码中。发送方应该再次发送另一命令指明是否继续操作,或者放弃操作。

2yz 全部完成应答

要求的操作已经完成,可以开始另一个新的请求。

3yz 需要近一步信息的部分完成应答

命令被接受,但是要求的操作被中止,需要接收进一步的信息。发送方应该发送另一条命令指明进一步的信息。

4yz 暂时未完成应答

命令未被接受,要求的操作也未执行,但是发生错误的状态是暂时的,可以再一次请求操作。发送者应该返回命令序列的开始命令(如果有的话)。很难解释这个暂时的意义,特别对于两个不同的站点来说。区别应答是属于些类还是下一类的方法是:如果能够不加任何改变地重复的再一次发送命令,就是本类的,如果不是,就是下一类(5yz)的。

5yz 永久未完成应答

命令未被接受,要求的操作未完成。发送对命令的重复不起作用。即使一些出错条件已经改变,但是用户已经不希望重试,而希望在未来的某个时间再进行操作。

应答的第二位的意义有以下几类:

x0z 语法:此类型的应答是针对以下情况的:语法错误;符合语法但命令不存在功能;未完成或冗余的命令。

x1z 信息:此类型的应答是用于请求信息的,如状态或帮助信息。

x2z 连接:此类型的应答是关于传输信道的。

x3z 未使用。

x4z 未使用。

x5z 邮件系统:此类型的应答指明接收方邮件系统关于请求传送或其它操作的状态的。

第三位给出了更详细的说明。列出的应答表说明了这一点。文本应答是推荐使用的,而不是必须使用的,它的内容是可以根据不同情况而变化的。另一方面,应答码必须严格遵守本节的说明。接收方不应该因为稍稍的不同情况而自己创建新的代码而不使用已经定义的代码。例如,如NOOP命令的情况,如果成功执行它后,不用返回任何新的信息,只用返回250应答。当发送的命令要求一个未实现的站点指定操作时,应答应该是502。应答文本可能多于一行;在此情况下,文本必须被标记,接收文本的一方才不致于少读入一行数据。这要求特定的格式说明多行应答。此格式是:每一行,除了最后一行外,都以应答码加一个"-"开始。而最后一行以应答码加空格开始。如下例:

123-First line

123-Second line

SMTP协议发邮件流程

HELO v domain >v CRLF > 用 C++ 发邮件 近段时间,实验室电脑的 IP 频繁地改变,搞得想用远程偷下懒都不行。这时想到的 解决方法有:静态IP,动态域名,自己解决。静态 IP 虽然可以自己指定,但一关机后,与 对方冲突就完了,作罢。免费的动态域名又要手机认证,也作罢。最后只能自己解决。解决 方案是写一个程序不断地检测本机 IP ,如果改变了,就发邮件通知。检测本机 IP 很简单, 就略过。这里介绍下怎样发邮件吧。 发邮件前,需要理解 SMTP(Simple Mail Transfer Protocol) 。 SMTP 是电子邮件从 客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议。 SMTP 是请 求/ 响应协议,命令和响应都是基于 ASCII 文本,并以 CR 和 LF 符结束。响应包括一个 表示返回状态的三位数字代码。在 TCP 协议 25 端口监听连接请求。其命令如下: SMTP 命令 命令说明 识 别发送方到接收 SMTP 的一个 HELO 命令 AUTH LOGIN 登陆服务器的命令。在这条命令之后,要发送用 Base64 编 码后的用户名与密码进行登陆 MAIL FROM: v reverse-path >v CRLF>v reverse-path >为发送者地址。 此命令告 诉接收方一个新邮件发送的开始, 并对所有的状态和缓冲区进行初始化。 此命令开始一个邮 件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。

RCPT TO:v forward-path >v CRLF>v forward-path >标识各个邮件接收者的地

SMTP协议的命令和应答

从前面的通讯模型可以看出SMTP协议在发送SMTP和接收SMTP之间的会话是靠发送SMTP的SMTP 命令和接收SMTP反馈的应答来完成的。在通讯链路建立后,发送SMTP发送MAIL命令指令邮件发送者,若接收SMTP此时可以接收邮件则作出OK的应答,然后发送SMTP继续发出RCPT命令以确认邮件是否收到,如果接收到就作出OK的应答,否则就发出拒绝接收应答,但这并不会对整个邮件操作造成影响。双方如此反复多次,直至邮件处理完毕。SMTP协议共包含10个SMTP命令,列表如下: SMTP命令命令说明 HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令 MAILFROM:<reverse-path><CRLF><reverse-path>为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。 RCPTTO:<forward-path><CRLF><forward-path>标识各个邮件接收者的地址 DATA<CRLF> 接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>标识数据的结尾。 REST<CRLF>退出/复位当前的邮件传输 NOOP<CRLF>要求接收SMTP仅做OK应答。(用于测试) QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输。 VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。 EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。 HELP<CRLF>查询服务器支持什么命令 注:<CRLF>为回车、换行,ASCII码分别为13、10(十进制)。 SMTP协议的每一个命令都会返回一个应答码,应答码的每一个数字都是有特定含义的,如第一位数字为2时表示命令成功;为5表失败;3表没有完成。一些较复杂的邮件程序利用该特点,首先检查应答码的首数字,并根据其值来决定下一步的动作。下面将SMTP的应答码列表如下: 应答码说明 501参数格式错误 502命令不可实现 503错误的命令序列 504命令参数不可实现 211系统状态或系统帮助响应 214帮助信息 220<domain>服务就绪 221<domain>服务关闭 421<domain>服务未就绪,关闭传输信道 250要求的邮件操作完成 251用户非本地,将转发向<forward-path> 450要求的邮件操作未完成,邮箱不可用 550要求的邮件操作未完成,邮箱不可用 451放弃要求的操作;处理过程中出错 551用户非本地,请尝试<forward-path> 452系统存储不足,要求的操作未执行

SMTP简单邮件传输协议

一个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非TCP 传输层协议组成。使用 SMTP ,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。 在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一跳 IP 地址。 在传输文件过程中使用25号端口 编辑本段协议原理 SMTP-简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传输的协议,它是基于TCP服务的应用层协议,由RFC0821所定义。SMTP协议规定的命令是以明文方式进行的。为了说明SMTP的工作原理,我们以向163发送邮件为实例进行说明。 在linux环境下,使用"telnet smtp.163. com 25"连接smtp.163. com 的25号端口(SMTP的标准服务端口);在windows下使用telnet程序,远程主机指定为smtp.163. com,而端口号指定为25,然后连接smtp.163. com:交互过程如下: SMTP [lix@nslix]$telnet smtp.163. com 25 220 163 .com Anti-spam GT for Coremail System (163com[071018]) HELO smtp.163 .com 250 OK auth login 334 dXNlcm5hbWU6 USER base64加密后的用户名 334 UGFzc3dvcmQ6 PASS base64加密后的密码 235 Authentication successful MAILFROM:XXX@163 .COM 250 Mail OK RCPTTO:XXX@163 .COM

SMTP与POP协议简析

SMTP、POP协议简析

作者:李鹏博时间:2016/06

1.SMTP协议与POP协议说明 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。 POP(Post Office Protocol)即邮局协议,用于电子邮件的接收。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。本文只介绍POP3。 2.SMTP协议简析 通过抓包,可以看到清晰的服务器与客户端的交流过程。如下图。

如上图,将整个流程分为三部分:握手阶段、认证阶段、发送数据阶段。其中TCP三次握手在上图中未体现,握手成功后,进入认证阶段。 SMTP命令字说明 HELO客户端为标识自己的身份而发送的命令(通常带域名) EHLO使服务器可以表明自己支持扩展简单邮件传输协议(ESMTP) 命令。 MAIL FROM标识邮件的发件人;以MAIL FROM: 的形式使用。 RCPT TO标识邮件的收件人;以RCPT TO: 的形式使用。 DATA客户端发送的、用于启动邮件内容传输的命令。 RSET使整个邮件的处理无效,并重置缓冲区。 QUIT终止会话。 对于服务器的每个回复,都有一个返回码,这个返回码标志着上次的请求操作完成状态。如果第一个数字是2表示操作成功;3表示操作正在进行;5表示操作失败。 握手阶段 认证阶段 握手成功后,邮件服务器(上面示例是163的邮件服务器)会发送欢迎连接信息。然后是客户端HELO(或EHLO),向服务器标识用户身份;接下来进行认证操作。认证成功后,客户端告诉服务器这封邮件从哪个邮箱来,到哪个邮箱去,mail from只有一个,但是recpt to 后面可以跟多个收件人地址。成功后,客户端请求发送邮件数据。 数据发送阶段 服务器回复DATA命令后,会有一个结束符说明。如上图,就是以.结束邮件DATA。其中即为“\r\n”;

基于POP3与SMTP协议的邮件收发程序的开发

一、设计思想 电子邮件指用电子手段传送信件、单据、资料等信息的通信方法。电子邮件综合了电话通信和邮政信件的特点,它传送信息的速度和电话一样快,又能象信件一样使收信者在接收端收到文字记录。电子邮件系统又称基于计算机的邮件报文系统。它承担从邮件进入系统到邮件到达目的地为止的全部处理过程。电子邮件不仅可利用电话网络, 而且可利用任何通信网传送。在利用电话网络时, 还可利用其非高峰期间传送信息,这对于商业邮件具有特殊价值。由中央计算机和小型计算机控制的面向有限用户的电子系统可以看作是一种计算机会议系统。 电子邮件的工作过程遵循客户- 服务器模式。每份电子邮件的发送都要涉及到发送方与接收方,发送方式构成客户端,而接收方构成服务器,服务器含有众多用户的电子信箱。发送方通过邮件客户程序,将编辑好的电子邮件向邮局服务器(SMTP服务器)发送。邮局服 务器识别接收者的地址,并向管理该地址的邮件服务器(POP3服务器)发送消息。 一个邮件系统的传输包含用户代理User Agent 传输代理TransferAgent 及接受代理DeliveryAgent 三大部分。 用户代理是一个用户发信和收信的程序, 负责将电子邮件按照一定的标准包装,然后送至邮件服务器, 或由邮件服务器收回。传输代理负责信件的交换和传输。将信件传送至适当的邮件主机, 再由接受代理将信件分发至不同的邮件信箱。传输代理必须要能够接受用户邮件程序送来的信件,解读收信人的地址,根据SMTP协议将它正确无误地传递到目的地。现在一般的传输代理已采用Sendmail 程序完成工作。电子邮件到达邮件主机后, 在经接收代理POP协议被用户读取至自己的主机。 电子邮件在发送与接收过程中都要遵循SMTP POP3等协议,这些协议确保了电子邮件 在各种不同系统之间的传输。其中,SMTP负责电子邮件的发送,而POP3则用于接收In ternet 上的电子邮件。 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/ IP协议族, 它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器, 我们就可以把E—mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP!务器则是遵循SMTP 协议的发送邮件服务器,用来发送或中转你发出的电子邮件。 POP3(Post Office Protocol 3)即邮局协议,目前已发展到第三版,称POP3它规 定怎样将个人计算机连接到Internet 的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议 的接收邮件服务器,用来接收电子邮件的。总的来说POP3协议是让用户把服务器上的信收 到本地来所需要的一种协议。 本程序为一个基于SMTP和POP3协议的小型EMAIL收发程序,简单的实现了邮件的收发功能。

SMTP协议原理

SMTP协议原理 SMTP协议原理 SMTP-简单邮件传输协议(SimpleMailTransferProtocol),是定义邮件传输最常用的协议,它是基于TCP服务的应用层协议,由RFC821所定义。SMTP协议规定的命令是以明文方式进行的。为了说明SMTP的工作原理,我们以向163发送邮件为实例进行说明。 在linux环境下,使用"telnet smtp.163. com 25"连接smtp.163. com的25号端口(SMTP的标准服务端口);在windows下使用telnet程序,远程主机指定为smtp.163. com,而端口号指定为25,然后连接smtp.163. com:交互过程如下:[lix@nslix]$telnet smtp.163. com 25 220 163 .com Anti-spam GT for Coremail System (163com[071018]) HELO smtp.163 .com 250 OK auth login 334 dXNlcm5hbWU6 USER base64加密后的用户名 334 UGFzc3dvcmQ6 PASS base64加密后的密码 235 Authentication successful MAILFROM:XXX@163 .COM

250 Mail OK RCPTTO:XXX@163 .COM 250 Mail OK DATA 354 End data with . QUIT 250 Mail OK queued as smtp5,D9GowLArizfIFTpIxFX8AA==.41385S2 HELO是客户向对方邮件服务器发出的标识自己的身份的命令,这里假设发送者为ideal;MAILFROM命令用来表示发送者的邮件地址;RCPTTO:标识接收者的邮件地址,这里表示希望发送邮件给XXX@163. COM,如果邮件接收者不是本地用户,例如RCPTTO:ideal,则说明希望对方邮件服务器为自己转发(Relay)邮件,若该机器允许转发这样的邮件,则表示该邮件服务器是OPENRELAY的,否则说明该服务器不允许RELAY;DATA表示下面是邮件的数据部分,输入完毕以后,以一个"."开始的行作为数据部分的结束标识;QUIT表示退出这次会话,结束邮件发送。 这就是一个简单的发送邮件的会话过程,其实当使用outlookexpress等客户软件发送时,后台进行的交互也是这样的,当然,SMTP协议为了处理复杂的邮件发送情况如附件等等,定义了很多的命令及规定,具体可以通过阅读RFC821来获得。当你的一个朋友向你发送邮件时,他的邮件服务器和你的邮件服务器通过SMTP协议通信,将邮件传递给你邮件地址所指示的邮件服务器上(这里假设你的本地邮件服务器是Linux系统),若你通过telnet协议直接登录到邮件服务器上,则可以使用mail 等客户软件直接阅读邮件,但是若你希望使用本地的MUA(MailUserAgent,如

SMTP协议RFC文档中文版

RFC821 简单邮件传输协议(SMTP) (RFC821 SIMPLE MAIL TRANSFER PROTOCOL) 目录 1. 介绍 2 2. SMTP模型 3 3. SMTP过程 4 3.1. MAIL 4 3.2. 转发 5 3.3. 确认和扩展 6 3.4. 发送信件(mailing)和获得信件(sending) 7 3.5. 打开和关闭7 3.6. 转发 8 3.7. 域9 3.8. 改变角色9 4. SMTP说明9 4.1. SMTP命令9 4.1.1. 命令语法9 4.1.2. COMMAND语法格式13 4.2. SMTP响应15 4.3. 命令和应答序列16 4.4. 状态图17 4.5. 详细内容18 4.5.1. 最小实现18 4.5.2. 透明性19 4.5.3. 大小19 附录 A TCP传输服务19 附录 B NCP传输服务20 附录 C NITS 20 附录 D X.25传输服务 20 附录 E 应答码构成方法20 附录 F 一些例子22 参考资料36 1. 介绍

简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用的术语。 SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。 2. SMTP模型 SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。 一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK 应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。 SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个传送服务下时,通过中继SMTP服务器传送。为了能够对SMTP服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。 MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转发路径的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径(它用于发生错误时返回邮件)。 当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一个数字代码。在下面,例子中可以看到哪些使用实际的命令和应答。完整的命令和应答在第四节。 命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的。这样SMTP实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不敏感。 命令与应答由ASCII字母表组成,当传送服务提供8位字节传送通道,每7位字符正确传送,而最高位被填充为0。当指定一般的命令或应答格式后,参数会由一些类似于语言的字符串表示出来,如""或"",这里尖括号表示这是一种类似于语言的变量。 3. SMTP过程 本节提供了SMTP中的一些过程。头一个说明的是基本发送过程(定义为发送操作)。下来描述向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终端和打开关闭交换。在本节的最后是对中断,邮件域的说明。本节的例子只是一部分命令和应答的序列,完整的例子见附录F。 3.1. MAIL 在SMTP发送操作中有三步,操作由MAIL命令开始给出发送者标识。一系列或更多的RCPT命令紧跟其后,给出了接收者信息,然后是DATA命令列出发送的邮件内容,最后邮件内容指示符确认操作。

POP3与SMTP协议

POP3协议 POP3,全名为“Post Office Protocol - Version 3”,即“邮局协议版本3”。是TCP/IP协议族中的一员,由RFC 1939 定义(见 Reference/rfc1939 pop3.html)。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。提供了SSL加密的POP3协议被称为POP3S。 使用telnet 连接pop3 最直观的了解什么是POP3,我觉得采用telnet的方式用pop3连接到邮件服务器,进行邮件的接收是最有效的。 打开终端,(C:client, S:Server) C: telnet http://biz.doczj.com/doc/519482946.html, 110 (用telnet方式连接163的pop3服务器,pop3协定端口为110) S: Trying 202.108.5.100... Connected to http://biz.doczj.com/doc/519482946.html,. Escape character is '^]'. +OK Welcome to coremail Mail Pop3 Server (163coms[3d8c1fa079729fb6acc588e66d30360es]) (服务器通常开头返回+OK表示正确的回应,+ERR表示所发命令有误) C: USER ***** (***处输入你的邮件用户名) S: +OK core mail (表示接受) C: PASS ***** (***处输入密码,这里都是明文显示) S: +OK 5 message(s) [9782 byte(s)] (这里表示服务器接受该帐户,服务器上对应有5封邮件,总大小9782个字节) C:LIST (LIST 命令列出每一封邮件的信息,己每封邮件对应的ID 号和大小) S: +OK 5 9782 1 1298 2 1311 3 1224 4 1312 5 4637 . C: TOP 1 0 (格式 TOP num 0, num代表邮件ID号,返回该邮件的头部信息) S:+OK 1298 octets (服务器接受) Received: from http://biz.doczj.com/doc/519482946.html, (unknown [221.10.25.6])

利用SMTP协议收发邮件

利用SMTP协议收发邮件 摘要 电子邮件可以达成发信人和收信人之间的信息交互。SMPT协议用来进行邮件的发送,本文分析了SMTP协议的目的意义和通信模型, 详细说明了它的命令和应答程序。并通过直接使用SMTP协议命令而在程序中实现电子邮件传送的方法。并在此基础上结合VC++ 6. 0的编程实现了接收和发送电子邮件。 关键字:SMTP协议;收发邮件;编程

目录 摘要 (1) 第一章背景知识概述 (3) 1.1 电子邮件 (3) 1.2 电子邮件体系结构和服务功能 (3) 第二章SMTP协议 (4) 2.1 SMTP协议目的及意义 (4) 2.2 SMTP协议工作原理 (4) 2.3 SMTP协议的命令和应答 (5) 第三章VC++6.0 中实现收发电子邮件 (6) 3.1 发送邮件类SMTPMail (6) 3.1.1 主要函数功能介绍 (6) 3.1.2 邮件发送程序 (7) 3.2 接收邮件 (9) 3.2.1 初始化MAPI (9) 3.2.2阅读电子邮件 (10) 3.2.3 读取电子邮件程序 (10) 第四章结论与心得体会 (11) 4.1结论 (11) 4.2 心得体会 (11) 参考文献 (11)

第一章背景知识概述 1.1电子邮件 电子邮件(E-mail,又称电子函件、电邮或邮件)是指通过互联网进行书写、发送和接收信件,目的是达成发信人和收信人之间的信息交互。电子邮件,electronic mail,简称 E-mail,标志是@,,又称电子信箱、电子邮政,电子邮件指用电子手段传送信件、单据、资料等信息的通信方法,通过网络的电子邮件系统,用户可以用低廉的价格、以快速的方式,与任何一个网络用户联系,这些电子邮件可以是文字、图象、声音等各种方式。 1.2电子邮件体系结构和服务功能 电子邮件系统主要分为两个子系统: 服务器系统和客户端系统。服务器系统的主要功能是实现电子邮件在Internet中的传输, 客户端系统的主要功能是发送电子邮件和接收电子邮件。电子邮件的工作原理遵循客户/ 服务器模式, 电子邮件的发送要涉及到发送方和接受方, 发送方构成客户端, 而接收方则为服务器。当发送方编辑好一份电子邮件。依照收件人的地址将其发送出去; 接收方服务器收到电子邮件后, 先将其存放在电子邮箱中, 并告知收件人有新邮件到来。发送方的主机与接收方的邮件服务器直接相连。 图1-1 SMTP交互命令模型 Figure. 1-1 SMTP command interaction model

计算机网络应用 SMTP协议

计算机网络应用SMTP协议 简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一种电子邮件协议,它既具有客户端(发送方)发送邮件的功能,又具有服务器(接收方)接收邮件的功能。SMTP 协议允许将电子邮件从一个计算机邮件服务器发送到另一个计算机邮件服务器,并且SMTP 服务器接收本地用户发送的邮件,以便将其传输到互联网中其他邮件服务器上。 在互联网中,大多数计算机系统通过本地邮件系统服务器在本地按路径发送电子邮件。SMTP发送程序从输出邮件队列中得到邮件报文,通过多个TCP连接将邮件报文传输到目标主机的25号端口上。在发送过程中,SMTP接收程序必须能够证实本地邮件目的地址,并处理各种差错,包括传输差错以及没有足够接收空间等。 SMTP发送程序对报文的作用直到SMTP接收程序指示传输完成才结束,因此SMTP协议的作用范围仅限于SMTP发送程序和SMTP接收程序之间的对话过程。SMTP协议的主要功能是传送报文,为了保证正确传送报文,SMTP协议规定了14条命令和21种响应信息。其中,每条命令由一行文本组和四个字母的命令组成;而每一种响应信息由一个三位数据代码和简单的文字说明组成。下面介绍SMTP协议通信过程中,各阶段主要用到的命令和响应信息。 1.建立连接 邮件发送方将需要发送的邮件发送到邮件缓存中,SMTP发送程序将每隔一定时间对邮件缓存进行扫描。如果缓存有未发送的电子邮件,则使用SMTP程序端口号与目的计算机的SMTP服务器建立连接。 建立连接后,发送方将发送“220 Service ready(服务就绪)”的信息,并向SMTP服务器发送用来标识自己的HELLO命令。当接收方的SMTP程序接收到发送方所发送的信息后,则返回响应信息“250 OK(一切正常)”,以便接收发送方SMTP发送程序的身份标识。如果接收方的邮件服务器不可用,则返回响应信息“421 Service not available(服务不可用)”。2.传输邮件 当连接建立成功后,SMTP发送程序将向SMTP接收程序发送邮件报文信息。邮件报文传送包括以下三个逻辑阶段: ●用一个EAIL命令标识出邮件报文的发送方。例如,MAIL FROM: 。 ●用一个或者多个RCPT命令标识该邮件报文的接收方。例如,RCPT TO: <收信人电子 邮箱地址>。 ●用一个DATA命令标识该邮件报文的内容。 发送MAIL命令后,如果SMTP服务器已经做好接收邮件的准备,则返回响应信息“250 OK(一切正常)”。否则,返回有关无法接收邮件原因的响应信息,例如451(处理时出错)、452(存储空间不够)、500(命令无法识别)等。 RCPT命令标识邮件接收方的电子邮箱地址,多次使用该命令能够为邮件指定多个接收者,并且每个RCPT命令都会返回一个单独的响应信息。例如“550 No such user here(无此用户)”,即不存在此电子邮箱地址。RCPT命令的作用是:先检测SMTP接收服务器是否做好接收邮件的准备,然后在进行邮件传输。 3.关闭连接 邮件发送完毕后,发送方SMTP服务器程序将发送QUIT命令。当接收方SMTP服务器程序返回响应信息“211(服务关闭)”时,表明接收方SMTP服务器程序同意关闭TCP连接。

SMTP协议发送电子邮件 源代码

namespace SMTPServer { public partial class sendMailTSMI : Form { public sendMailTSMI() { InitializeComponent(); } private void sendMailTSMI_Load(object sender, EventArgs e) { fromTxt.Text = SendMail.mailFrom; prptComBox.SelectedIndex = 0; rBtnHTML.Checked = true; } private void button1_Click(object sender, EventArgs e)//浏览按钮 { OpenFileDialog oFileDialog = new OpenFileDialog(); if (oFileDialog.ShowDialog() == DialogResult.OK) { AttachTxt.Text = oFileDialog.FileName; } } private void btnSend_Click(object sender, EventArgs e)//发送按钮 { if (toTxt.Text.Trim() == "") { MessageBox.Show("收件人不能为空!"); return; } if (fromTxt.Text.Trim() == string.Empty) { MessageBox.Show("发件人不能为空!"); return;

} string mailTo = toTxt.Text.Trim(); string mailCC = ccTxt.Text.Trim(); string mailSubject = subjectTxt.Text.Trim(); string mailFrom = fromTxt.Text.Trim(); string mailBody = bodytxt.Text.Trim(); //实例化MailAddress MailAddress maddr = new MailAddress(mailFrom);//包含收件人地址的MailAddress //初始化MailMessage MailMessage mymail = new MailMessage(); mymail.To.Add(mailTo);//向收件人地址集合添加邮件地址 http://biz.doczj.com/doc/519482946.html,.Add(mailCC);//向抄送收件人地址集合添加邮件地址 mymail.From = mailFrom;//发件人地址 mymail.Subject = mailSubject;//邮件标题 mymail.SubjectEncoding = Encoding.UTF8;//获取或设置电子邮件的主题内容实用的编码 mymail.Body = mailBody;//邮件正文 mymail.BodyEncoding = Encoding.UTF8;//获取或设置邮件正文的编码 //设置优先级 switch (prptComBox.SelectedText.ToString()) { case"高": mymail.Priority = MailPriority.High; break; case"中": mymail.Priority = MailPriority.Normal; break; case"低":

SMTP协议

SMTP协议RFC文档中文版 RFC821 简单邮件传输协议(SMTP) (RFC821 SIMPLE MAIL TRANSFER PROTOCOL) 目录 1. 介绍 2 2. SMTP模型 3 3. SMTP过程 4 3.1. MAIL 4 3.2. 转发 5 3.3. 确认和扩展 6 3.4. 发送信件(mailing)和获得信件(sending) 7 3.5. 打开和关闭7 3.6. 转发8 3.7. 域9 3.8. 改变角色9 4. SMTP说明9 4.1. SMTP命令9 4.1.1. 命令语法9 4.1.2. COMMAND语法格式13 4.2. SMTP响应15 4.3. 命令和应答序列16

4.4. 状态图17 4.5. 详细内容18 4.5.1. 最小实现18 4.5.2. 透明性19 4.5.3. 大小19 附录 A TCP传输服务19 附录 B NCP传输服务20 附录 C NITS 20 附录 D X.25传输服务20 附录 E 应答码构成方法20 附录 F 一些例子22 参考资料36 1. 介绍 简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用的术语。 SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。 2. SMTP模型

SMTP及POP3协议分析报告

网络协议分析与设计实验报告

五、实验结果与分析(含程序、数据记录及分析和实验总结等): 1、SMTP报文是如何封装的?客户端软件在发送时,向SMTP服务器发送了哪些SMTP报文?SMTP 服务器的响应信息是什么?请列出上述SMTP报文和SMTP服务器的响应信息。 依次封装在tcp报文的数据区域,ip数据包的数据区域,以太网帧的数据区域。 三次握手建立连接 00 0F E2 45 B9 C2 00 E5 7C 07 DF 45 08 00 45 00 00 40 CE F2 40 00 40 06 79 87 0A 84 FE 9F DC B5 0C 65 08 B7 00 6E 93 9D 52 22 00 00 00 00 B0 02 FF FF 54 DB 00 00 02 04 05 B4 01 03 03 03 01 01 08 0A 00 00 00 00 00 00 00 00 01 01 04 02 0C 2、POP3报文是如何封装的?在使用客户端软件接收时,向POP3服务器发送了哪些POP报文?POP3服务器的响应信息是什么?请列出上述POP3报文和POP3服务器的响应信息。 依次封装在tcp报文的数据区域,ip数据包的数据区域,以太网帧的数据区域。 三次握手建立连接 00 E5 7C 07 DF 45 00 0F E2 45 B9 C2 08 00 45 00 00 34 00 00 40 00 35 06 53 86 DC B5 0C 65 0A 84 FE 9F 00 6E 08 B7 6B 9C 45 4F 93 9D 52 23 80 12 16 D0 C6 21 00 00 02 04 05 B4 01 01 04 02 01 03 03 07 00 3、给出利用TCP连接工具与SMTP/POP3服务器建立TCP连接后,利用SMTP/POP3命令发送和

SMTP协议

SMTP协议 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供与来信有关的通知。 SMTP目前已是事实上的在Internet传输E-Mail的标准,是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确定是存在的),然后消息文本就传输了。可以很简单地通过Telnet程序来测试一个SMTP服务器,SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX(Mail eXchange)DNS。 SMTP协议发展[回目录] 在20世纪80年代早期SMTP开始被广泛地使用。当时它只是作为UUCP的补充,UUCP更适合于处理在间歇连接的机器间传送邮件。相反SMTP在发送和接收的机器始终都联网的情况下工作得最好。 SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。SMTP重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。通常,一个网络可以由公用因特网上TCP可相互间访问的主机、防火墙分隔的TCP/IP网络上TCP可相互访问的主机,以及其他LAN/WAN中的主机利用非TCP传输层协议组成。使用SMTP,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关是实现某处理机与其他网络之间的邮件传输。 在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一跳IP地址。 Sendmail是最早实现SMTP的邮件传输代理之一。到2001年至少有50个程序将SMTP实现为一个客户端(消息的发送者)或一个服务器(消息的接受者)。一些其他的流行的SMTP服务器包括Philip Hazel的exim,IBM的Postfix,D.J.Bernstein 的Qmail,以及Mi crosoft Exchange Server. 由于这个协议开始是基于纯ASCⅡ文本的,在二进制文件上处理得并不好。后来开发了用来编码二进制文件的标准,如MIME,以使其通过SMTP来传输。今天,大多数SMTP服务器都支持8位MIME扩展,它使二进制文件的传输变得几乎和纯文本一样简单。

SMTP协议详解

SMTP协议分析 第1章SMTP概述 1.1 SMTP在邮件通信中的位置 SMTP,即简单邮件传送协议,所对应RFC文档为RFC821。同http等多数应用层协议一样,它工作在C/S模式下,用来实现因特网上的邮件传送。SMTP在整个电子邮件通信中所处的位置如图 1所示。 图 1电子邮件的通信过程 可以看出,SMTP是用来将客户机上的邮件传送到服务器上。这里的客户机是指某次连接中的发送方,服务器是指相应的接收方。在讲解发送邮件的整个通信过程前,先解释一下面几个术语。 1.2几个术语 1.2.1.邮件 邮件是一种消息的格式,由信封、首部和正文组成。 信封上最重要的是收信人的地址。邮件服务器用这个地址将邮件发送到收信人所在的邮件服务器上。 首部是由用户代理或邮件服务器添加的一些信息。包括Received、Message-ID、From、Data、Reply-To、X-Phone、X-Mailer、To和Subject等字段。 正文是是发送用户发给接收用户报文的内容。RFC 822 规定正文为NVT ASCII 文字行。 更为详细的说明,请参考RFC821和RFC822等协议。

1.2.2.用户代理 用户代理UA(User Agent)是用户与电子邮件系统的交互接口,一般来说它就是我们PC机上的一个程序。Windows上常见的用户代理是Foxmail和Outlook Express。 用户代理提供一个好的用户界面,它提取用户在其界面填写的各项信息,生成一封符合SMTP等邮件标准的邮件,然后采用SMTP协议将邮件发送到发送端邮件服务器。 1.2.3.邮件服务器 邮件服务器是电子邮件系统的核心,它用来发送和接收邮件。邮件服务器不同于普通PC的是它几乎是全天工作的,所以它可以在任何时候为用户提供服务,后面将提到这正是为什么需要邮件服务器的一个重要原因。很多ISP都提供免费的邮件服务器,如126提供http://biz.doczj.com/doc/519482946.html,邮件服务器。 邮件服务器向其它邮件服务器转发邮件也是采用SMTP协议。 1.3 邮件的收发过程 一般情况下,一封邮件的发送和接收过程如下。 1)发信人在用户代理里编辑邮件,包括填写发信人邮箱、收信人邮 箱和邮件标题等等。 2)用户代理提取发信人编辑的信息,生成一封符合邮件格式标准 (RFC822)的邮件。 3)用户代理用SMTP将邮件发送到发送端邮件服务器(即发信人邮箱 所对应的邮件服务器)。 4)发送端邮件服务器用SMTP将邮件发送到接收端邮件服务器(即收 信人邮箱所对应的邮件服务器)。 5)收信人调用用户代理。用户代理用POP3协议从接收端邮件服务器 取回邮件。 6)用户代理解析收到的邮件,以适当的形式呈现在收信人面前。 第2章.SMTP详解 2.1.通信过程 一个具体的SMTP通信(如发送端邮件服务器与接收端服务器的通信)的过程如下。 1)发送端邮件服务器(以下简称客户端)与接收端邮件服务器(以 下简称服务器)的25号端口建立TCP连接。 2)客户端向服务器发送各种命令,来请求各种服务(如认证、指定 发送人和接收人)。 3)服务器解析用户的命令,做出相应动作并返回给客户端一个响应。 4)2)和3)交替进行,直到所有邮件都发送完或两者的连接被意外中 断。

FTP协议、SMTP协议、POP3协议、HTTP协议、SNMP协议、NNTP协议

FTP协议、SMTP协议、POP3协议、HTTP协议、SNMP协议、NNTP协议 1.FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。用户可以通过它把自己的PC机与世界各地所有运行FTP 协议的服务器相连,访问服务器上的大量程序和信息。 2.SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。 3.POP3(Post Office Protocol 3)即邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员,,由RFC 1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件. 4.超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP 最初的目的是为了提供一种发布和接收HTML页面的方法。在Internet上的Web 服务器上存放的都是超文本信息,客户机需要通过HTTP协议传输所要访问的超文本信息。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。 5.SNMP(Simple Network Management Protocol,简单网络管理协议)的前身是简单网关监控协议(SGMP),用来对通信线路进行管理。SNMP的体系结构是围绕着以下四个概念和目标进行设计的:保持管理代理(agent)的软件成本尽可能低;最大限度地保持远程管理的功能,以便充分SNMP工作原理利用Internet 的网络资源;体系结构必须有扩充的余地;保持SNMP的独立性,不依赖于具体的计算机、网关和网络传输协议。在最近的改进中,又加入了保证SNMP体系本身安全性的目标。 6.NNTP即Network News Transport Protocol的缩写,中文释义:(RFC-977)网络新闻传输协议.这是一个主要用于阅读和张贴新闻文章(俗称为“帖子”,比较正式的是“新闻组邮件”)到Usenet上的Internet应用协议,这个协议也负责新闻在服务器间的传送.NNTP协议是由加州大学圣迭戈分校的Brian Kantor和加州大学伯克利分校的Phil Lapsley发明的.其他为此协议贡献过的人包贝勒医学院的

相关主题