smtp协议规定了

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

竭诚为您提供优质文档/双击可除
smtp协议规定了
篇一:smtp协议详解
smtp协议分析
第1章smtp概述
1.1smtp在邮件通信中的位置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等字段。

正文是是发送用户发给接收用户报文的内容。

RFc822规定正文为nVtascii文字行。

更为详细的说明,请参考RFc821和RFc822等协议。

1.2.2.用户代理用户代理ua(useragent)是用户与电子邮件系统的交互接口,一般来说它就是我们pc机上的一个程序。

windows上常见的用户代理是Foxmail和outlookexpress。

用户代理提供一个好的用户界面,它提取用户在其界面填写的各项信息,生成一封符合smtp等邮件标准的邮件,然后采用smtp协议将邮件发送到发送端邮件服务器。

1.2.3.邮件服务器
邮件服务器是电子邮件系统的核心,它用来发送和接收邮件。

邮件服务器不同于普通pc的是它几乎是全天工作的,所以它可以在任何时候为用户提供服务,后面将提到这正是为什么需要邮件服务器的一个重要原因。

很多isp都提供免费的邮件服务器,如126提供邮件服务器。

邮件服务器向其它邮件服务器转发邮件也是采用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)交替进行,直到所有邮件都发送完或两者的连接被意外中断。

从这个过程看出,命令和响应是smtp协议的重点,下面将予以重点讲述。

2.2.命令和响应
2.2.1.格式smtp的命令不多(14个),它的一般形式是:command[parameter]。

其中command是ascii形式的命令名,parameter是相应的命令参数,是回车换行符(0dh,0ah)。

smtp的响应也不复杂,它的一般形式是:xxxReadableillustration。

xxx是三位十进制数;Readableillustration是可读的解释说明,用来表明命令是否成功等。

xxx具有如下的规律:以2开头的表示成功,以4和5开头的表示失败,以3开头的表示未完成(进行中)。

2.2.2.一个例子命令和响应的格式是语法,各命令和响应的意思则是语义,各命令和各响应在时间上的关系则是同步。

下面将通过一个简单的smtp通信过程来说明协议的这三个要素。

c:25/*以telnet方式连接126邮
件服务器*/
s:
anti-spamgtforcoremailsystem(126com[07101 8])/*220为响应数字,其后的为欢迎信息,会应服务器不同而不同*/
c:/*helo后用来填写返回域名(具
体含义请参阅RFc821),但该命令并不检查后面的参数*/ S:250ok
c:mailFRom:bripengandre@/*发送者邮箱*/
s:250./*“”代表省略了一些可读信息*/
c:Rcptto:bripengandre@/*接收者邮箱*/
s:250./*“”代表省略了一些可读信息*/
c:data/*请求发送数据*/
s:354entermail,endwith"."onalinebyitself
c:enjoyprotocolstuding
c:.
s:250messagesent
c:quit/*退出连接*/
s:221bye
分析上面的过程可参考注释进行,这里要补充如下几点。

1)“c:”开头的行(不包括"c:")是客户端的输入,而
以“s:”
开头的行(不包括"s:")则是服务器的输出。

2)上述的命令并不一定会一次性成功,服务器会返回错误响应,客户端应该按照协议规定的时序,来输入后续的命令(或重复执行失败的命令,或重置会话,或退出会话等等)。

2.2.
3.常用命令
smtp命令不区分大小写,但参数区分大小写,有关这方面的详细说明请参考RFc821。

常用的命令如下。

helo。

向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。

mailFRom:。

为发送者地址,此命令用来初始化邮件传输,即用来对所有的状态和缓冲区进行初始化。

Rcptto:。

用来标志邮件接收者的地址,常用在mailFRom 后,可以有多个Rcptto。

data。

将之后的数据作为数据发送,以.标志数据的结尾。

Rest。

重置会话,当前传输被取消。

noop。

要求服务器返回ok应答,一般用作测试。

quit。

结束会话。

VRFy。

验证指定的邮箱是否存在,由于安全方面的原因,服务器大多禁止此命令。

expn。

验证给定的邮箱列表是否存在,由于安全方面的
原因,服务器大多禁止此命令。

help。

查询服务器支持什么命令。

2.2.4.常用响应常用的响应如下所示,数字后的说明是从英文译过来的。

更详细的说明请参考RFc821。

501参数格式错误
502命令不可实现
503错误的命令序列
504命令参数不可实现
211系统状态或系统帮助响应
214帮助信息
220<domain>服务就绪
221<domain>服务关闭
421<domain>服务未就绪,关闭传输信道
250要求的邮件操作完成
251用户非本地,将转发向<forward-path>
450要求的邮件操作未完成,邮箱不可用
550要求的邮件操作未完成,邮箱不可用
451放弃要求的操作;处理过程中出错
551用户非本地,请尝试<forward-path>
452系统存储不足,要求的操作未执行
552过量的存储分配,要求的操作未执行
553邮箱名不可用,要求的操作未执行
354开始邮件输入,以"."结束
554操作失败
第3章.smtp的扩充3.1.smtp的缺点
从2.2.2的例子可以看出,smtp至少还有如下缺点。

1)命令过于简单,没提供认证等功能。

2)只传送7位的ascii码,不能传送二进制文件。

针对缺点1),标准化组织制定了扩充的smtp(即esmtp),对应的RFc文档为RFc1425。

针对缺点2),标准化组织在兼容smtp的前提下,提出了传送非7位ascii码的方法,对应的RFc文档有两个:邮件首部的扩充对应于RFc1522,邮件正文的扩充对应与RFc1521(即mime)。

3.2.esmtpesmtp最显著的地方是添加了用户认证功能。

如果用户想使用esmtp提供的新命令,则在初次与服务器交互时,发送的命令应该是ehlo而不是helo。

先来看一个例子。

c:25/*以telnet方式连接126邮件服务器*/
s:
anti-spamgtforcoremailsystem(126com[07101 8])/*220为响应数字,其后的为欢迎信息,会应服务器不同而不同*/
c:/*除了helo所具有的功能外,ehlo
主要用来查询服务器支持的扩充功能*/s:250-mail s:250-authloginplain
s:250-auth=loginplain
s:2508bitmime/*最后一个响应数字应答码之后跟的是一个空格,而不是-*/
c:authlogin/*请求认证*/
s:334dxnlcm5hbwu6/*服务器的响应——经过base64编码了的“username”*/
c:y29zdgFayw1hegl0lm5lda==/*发送经过base64编码了的用户名*/
s:334ugFzc3dvcmq6/*经过base64编码了的"password:"*/
c:mtk4mjixna==/*客户端发送的经过base64编码了的密码*/
s:235authsuccessfully/*认证成功*/
c:mailFRom:bripengandre@/*发送者邮箱*/
s:250./*“”代表省略了一些可读信息*/
c:Rcptto:bripengandre@/*接收者邮箱*/
s:250./*“”代表省略了一些可读信息*/
c:data/*请求发送数据*/
s:354entermail,endwith"."onalinebyitself
c:enjoyprotocolstuding
c:.
s:250messagesent
c:quit/*退出连接*/
s:221bye
对于这个例子有如下几点说明。

篇二: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等字段。

正文是是发送用户发给接收用户报文的内容。

RFc822规定正文为nVtascii文字行。

更为详细的说明,请参考RFc821和RFc822等协议。

1.2.2.用户代理
用户代理ua(useragent)是用户与电子邮件系统的交互接口,一般来说它就是我们pc机上的一个程序。

windows 上常见的用户代理是Foxmail和outlookexpress。

用户代理提供一个好的用户界面,它提取用户在其界面填写的各项信息,生成一封符合smtp等邮件标准的邮件,然后采用smtp协议将邮件发送到发送端邮件服务器。

1.2.3.邮件服务器
邮件服务器是电子邮件系统的核心,它用来发送和接收邮件。

邮件服务器不同于普通pc的是它几乎是全天工作的,所以它可以在任何时候为用户提供服务,后面将提到这正是为什么需要邮件服务器的一个重要原因。

很多isp都提供免费的邮件服务器,如126提供邮件服务器。

邮件服务器向其它邮件服务器转发邮件也是采用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)交替进行,直到所有邮件都发送完或两者的连接被意外中断。

从这个过程看出,命令和响应是smtp协议的重点,下面将予以重点讲述。

2.2.命令和响应
2.2.1.格式
smtp的命令不多(14个),它的一般形式是:command[parameter]。

其中command是ascii形式的命令名,parameter是相应的命令参数,是回车换行符(0dh,0ah)。

smtp的响应也不复杂,它的一般形式是:xxxReadableillustration。

xxx是三位十进制数;Readableillustration是可读的解释说明,用来表明命令是否成功等。

xxx具有如下的规律:以2开头的表示成功,以4和5开头的表示失败,以3开头的表示未完成(进行中)。

2.2.2.一个例子
命令和响应的格式是语法,各命令和响应的意思则是语义,各命令和各响应在时间上的关系则是同步。

下面将通过一个简单的smtp通信过程来说明协议的这三个要素。

c:25
s:
anti-spamgtforcoremailsystem(126com[07101 8])c:
S:250ok
c:mailFRom:bripengandre@
s:250.
c:Rcptto:bripengandre@
s:250.
c:data
s:354entermail,endwith"."onalinebyitself
c:enjoyprotocolstuding
c:.
s:250messagesent
c:quit
s:221bye
分析上面的过程可参考注释进行,这里要补充如下几点。

1)“c:”开头的行(不包括"c:")是客户端的输入,而
以“s:”开头的行(不包括"s:")则是服务器的输出。

2)上述的命令并不一定会一次性成功,服务器会返回错误响应,客户端应该按照协议规定的时序,来输入后续的命令(或重复执行失败的命令,或重置会话,或退出会话等等)。

2.2.
3.常用命令
smtp命令不区分大小写,但参数区分大小写,有关这方面的详细说明请参考RFc821。

常用的命令如下。

helo。

向服务器标识用户身份发送者能欺骗,说谎,但
一般情况下服务器都能检测到。

mailFRom:。

为发送者地址,此命令用来初始化邮件传输,即用来对所有的状态和缓冲区进行初始化。

Rcptto:。

用来标志邮件接收者的地址,常用在mailFRom 后,可以有多个Rcptto。

篇三: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等字段。

正文是是发送用户发给接收用户报文的内容。

RFc822规定正文为nVtascii文字行。

更为详细的说明,请参考RFc821和RFc822等协议。

1.2.2.用户代理
用户代理ua(useragent)是用户与电子邮件系统的交互接口,一般来说它就是我们pc机上的一个程序。

windows 上常见的用户代理是Foxmail和outlookexpress。

用户代理提供一个好的用户界面,它提取用户在其界面填写的各项信息,生成一封符合smtp等邮件标准的邮件,然后采用smtp协议将邮件发送到发送端邮件服务器。

1.2.3.邮件服务器
邮件服务器是电子邮件系统的核心,它用来发送和接收邮件。

邮件服务器不同于普通pc的是它几乎是全天工作的,所以它可以在任何
时候为用户提供服务,后面将提到这正是为什么需要邮件服务器的一个重要原因。

很多isp都提供免费的邮件服务器,如126提供邮件服务器。

邮件服务器向其它邮件服务器转发邮件也是采用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)交替进行,直到所有邮件都发送完或两者的连接被意外中断。

从这个过程看出,命令和响应是smtp协议的重点,下面将予以重点讲述。

2.2.命令和响应
2.2.1.格式
smtp的命令不多(14个),它的一般形式是:command[parameter]。

其中command是ascii形式的命令名,parameter是相应的命令参数,是回车换行符(0dh,0ah)。

smtp的响应也不复杂,它的一般形式是:xxxReadableillustration。

xxx是三位十进制数;Readableillustration是可读的解释说明,用来表明命令是否成功等。

xxx具有如下的规律:以2开头的表示成功,以4和5开头的表示失败,以3开头的表示未完成(进行中)。

2.2.2.一个例子
命令和响应的格式是语法,各命令和响应的意思则是语义,各命令和各响应在时间上的关系则是同步。

下面将通过一个简单的smtp通信过程来说明协议的这三个要素。

c:25/*以telnet方式连接126邮件服务器*/
s:
anti-spamgtforcoremailsystem(126com[07101
8])/*220为响应数字,其后的为欢迎信息,会应服务器不同而不同*/
c:/*helo后用来填写返回域名(具
体含义请参阅RFc821),但该命令并不检查后面的参数*/ S:250ok
c:mailFRom:bripengandre@/*发送者邮箱*/
s:250./*“”代表省略了一些可读信息*/
c:Rcptto:bripengandre@/*接收者邮箱*/
s:250./*“”代表省略了一些可读信息*/
c:data/*请求发送数据*/
s:354entermail,endwith"."onalinebyitself
c:enjoyprotocolstuding
c:.
s:250messagesent
c:quit/*退出连接*/
s:221bye
分析上面的过程可参考注释进行,这里要补充如下几点。

1)“c:”开头的行(不包括"c:")是客户端的输入,而
以“s:”开头的行(不包括"s:")则是服务器的输出。

2)上述的命令并不一定会一次性成功,服务器会返回错误响应,客户端应该按照协议规定的时序,来输入后续的命
令(或重复执行失败的命令,或重置会话,或退出会话等等)。

2.2.
3.常用命令
smtp命令不区分大小写,但参数区分大小写,有关这方面的详细说明请参考RFc821。

常用的命令如下。

helo。

向服务器标识用户身份发送者能欺骗,说谎,但一般情况下服务器都能检测到。

mailFRom:。

为发送者地址,此命令用来初始化邮件传输,即用来对所有的状态和缓冲区进行初始化。

Rcptto:。

用来标志邮件接收者的地址,常用在mailFRom 后,可以有多个Rcptto。

data。

将之后的数据作为数据发送,以.标志数据的结尾。

Rest。

重置会话,当前传输被取消。

noop。

要求服务器返回ok应答,一般用作测试。

quit。

结束会话。

VRFy。

验证指定的邮箱是否存在,由于安全方面的原因,服务器大多禁止此命令。

expn。

验证给定的邮箱列表是否存在,由于安全方面的原因,服务器大多禁止此命令。

help。

查询服务器支持什么命令。

2.2.4.常用响应
常用的响应如下所示,数字后的说明是从英文译过来的。

更详细的说明请参考RFc821。

501参数格式错误
502命令不可实现
503错误的命令序列
504命令参数不可实现
211系统状态或系统帮助响应
214帮助信息
220<domain>服务就绪
221<domain>服务关闭
421<domain>服务未就绪,关闭传输信道
250要求的邮件操作完成251用户非本地,将转发向<forward-path>
450要求的邮件操作未完成,邮箱不可用
550要求的邮件操作未完成,邮箱不可用
451放弃要求的操作;处理过程中出错
551用户非本地,请尝试<forward-path>
452系统存储不足,要求的操作未执行
552过量的存储分配,要求的操作未执行
553邮箱名不可用,要求的操作未执行
354开始邮件输入,以"."结束
554操作失败
第3章.smtp的扩充
3.1.smtp的缺点
从2.2.2的例子可以看出,smtp至少还有如下缺点。

1)命令过于简单,没提供认证等功能。

2)只传送7位的ascii码,不能传送二进制文件。

针对缺点1),标准化组织制定了扩充的smtp(即esmtp),对应的RFc文档为RFc1425。

针对缺点2),标准化组织在兼容smtp的前提下,提出了传送非7位ascii码的方法,对应的RFc文档有两个:邮件首部的扩充对应于RFc1522,邮件正文的扩充对应与RFc1521(即mime)。

3.2.esmtp
esmtp最显著的地方是添加了用户认证功能。

如果用户想使用esmtp提供的新命令,则在初次与服务器交互时,发送的命令应该是ehlo而不是helo。

先来看一个例子。

c:25/*以telnet方式连接126邮件服务器*/
s:
anti-spamgtforcoremailsystem(126com[07101 8])/*220为响应数字,其后的为欢迎信息,会应服务器不同而不同*/
c:/*除了helo所具有的功能外,ehlo 主要用来查询服务器支持的扩充功能*/s:250-mail s:250-authloginplain
s:250-auth=loginplain
s:2508bitmime/*最后一个响应数字应答码之后跟的是一个空格,而不是-*/
c:authlogin/*请求认证*/
s:334dxnlcm5hbwu6/*服务器的响应——经过base64编码了的“username”*/
c:y29zdgFayw1hegl0lm5lda==/*发送经过base64编码了的用户名*/
s:334ugFzc3dvcmq6/*经过base64编码了的"password:"*/
c:mtk4mjixna==/*客户端发送的经过base64编码了的密码*/。

相关文档
最新文档