首页 理论教育 SMTP协议解析-计算机网络—原理、技术与应用

SMTP协议解析-计算机网络—原理、技术与应用

时间:2023-11-05 理论教育 版权反馈
【摘要】:目前绝大多数邮件服务器都安装SMTP和POP3两项协议,即SMTP服务器作为邮件发送服务器,POP3服务器作为邮件接收服务器。SMTP是基于文本的协议。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。

SMTP协议解析-计算机网络—原理、技术与应用

邮件发送与接收过程中,须遵循一些基本协议与业务标准,这些协议和标准保证邮件在各种不同网络与操作系统之间能够正确传输。

常见电子邮件传输协议主要有以下3种:

SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)。是目前最常用的电子邮件传送协议,负责将邮件准确无误地从一台计算机传送至另一台计算机。

POP3(Post Office Protocol,version 3,邮局协议)。是目前最常用的电子邮件接收协议,其作用是把邮件从服务器的电子信箱中准确无误地传输到本地用户计算机中。

IMAP4(Internet Message Access Protocol,version 4,网络邮件访问协议)。是POP3的一种替代、改进协议,提供邮件检索和邮件处理的新功能,用户不必下载完整的邮件就可看到邮件标题摘要,可有选择地下载邮件以节省时间。

目前绝大多数邮件服务器都安装SMTP和POP3两项协议,即SMTP服务器作为邮件发送服务器,POP3服务器作为邮件接收服务器。电子邮件客户端软件基本上都支持SMTP协议和POP3协议,如Foxmail、Outlook Express、Netscape Messenger等。

为使电子邮件能传输非文本(二进制)数据,主要使用MIME(Multipurpose Internet Mail Extensions,多用途网络邮件扩展)协议。MIME定义了传输非文本电子邮件附件的标准,首先将二进制数据进行编码,转变成标准的7位ASCII码,然后再通过SMTP协议传输。

1.SMTP作用

SMTP是最早出现,也是最流行的互联网邮件服务协议,基于TCP/IP的应用层协议,功能是当发送方计算机与支持SMTP协议的电子邮件服务器连接时,将电子邮件由发送方计算机准确无误地传送到接收方的电子邮箱中。

SMTP的一个重要特点是能在传送过程中接力传送邮件,邮件可通过不同网络上的主机进行接力传送。

SMTP是基于文本的协议。通过SMTP发送的所有电子邮件都为普通文本格式,而不能直接传输图像、声音等非文本信息,可应用MIME标准将二进制文件编码后再通过SMTP传输。在网络上明码传输文本信息,意味着可能被中途截取并复制,对内容进行窜改,甚至冒名顶替伪造邮件。ESMTP(Extended SMTP,扩展的SMTP)解决了上述安全问题缺陷。

SMTP只是邮件发送协议,只能实现邮件传送功能,要想从邮件服务器上下载邮件,邮件客户端必须使用POP或IMAP协议。

2.SMTP工作原理

SMTP协议定义了将电子邮件从发送方传送到接收方的传输规则,其通信模型如图11-3所示,主要工作集中在发送SMTP和接收SMTP上。

978-7-111-43162-6-Chapter11-3.jpg

图11-3 SMTP通信模型示意图

发送SMTP在接到用户的邮件请求后,判断此邮件是否为本地邮件,若是则直接投送到用户的邮箱,否则向DNS查询远端邮件服务器的MX纪录,并建立与远端接收SMTP之间的双向传送通道,此后SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如SMTP接收者可接收邮件则返回OK应答,再发出RCPT命令确认邮件是否接收到。如SMTP接收者接收,则返回OK应答;如不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会收到特别序列,如接收者成功处理邮件,则返回OK。

SMTP命令、响应以及邮件内容,使用的都是NVT ASCII格式的文本,SMTP命令和响应都以双字符序列<CR-LF>作为行结束符,响应中包括一个3位数字代码和1个描述字符串,这些特征与FTP协议中的定义基本相同。

3.SMTP连接与发送

SMTP是一种请求响应协议,客户端发送命令,服务器返回响应,两者通过这种方式进行交互,以完成邮件传输过程的3个阶段:建立连接、传输数据和终止连接。过程如下:

1)SMTP是个请求/响应协议,监听25号端口,客户端并主动连接到服务器,建立TCP连接。服务器会发送一个应答码为220的问候报文,表示已准备就绪。用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。

2)客户端向服务器发送HELO命令,用以标识发送方的身份,HELO命令的参数必须是一个合法的主机名。如服务器接受了连接请求,会给客户端返回一个代码为250的应答,表示可开始报文的传输。

3)客户端发送MAIL命令标识邮件的发送方,通过FROM参数指定发送方的电子邮件地址。如服务器准备接收邮件,则返回代码为250的OK应答。

4)客户端发送RCPT命令标识邮件的接收方,通过TO参数指定接收方的电子邮件地址,如有多个接收人,可发送多个RCPT命令。如服务器能识别接收人,则会返回代码为250的OK应答,否则返回代码为550的失败应答。

5)客户端与服务器之间的协商结束,客户端发送DATA命令指示将要发送邮件数据,服务器端返回应答码为354的响应进行确认,表示可开始邮件输入。客户端将邮件内容按行发送,邮件的末尾由客户端指定,是只有一个小数点的一行,这个小数点也称为邮件数据结束指示器。服务器检测到该指示器后,返回代码为250的OK应答。

6)客户端发送QUIT命令终止连接。

4.SMTP命令

SMTP命令和FTP命令一样,都使用NVT ASCII格式的文本,以明文传输。这里介绍一些命令的功能及格式。格式中<SP>表示空格,<CR-LF>表示行结束符。

●HELO命令格式:HELO<SP><domain><CR-LF>HELO命令用于启动邮件传输过程。发送端需要以发送方主机域名<domain>来标识身份,接收端通过返回自己的域名来确认请求。

●MAIL命令格式:MAIL<SP>FROM:<reverse-path><CR-LF>MAIL命令用于初始化邮件传输。参数包括“FROM:”字段及<reverse-path>(逆向路径),逆向路径是指到达邮件发送端所经过的路径,逆向路径中第一个主机是发送SMTP命令的主机。如果邮件在传输过程中出现问题,错误报文会被重定向到逆向路径所指定的地址。

●RCPT命令格式:RCPT<SP>TO:<forward-path><CR-LF>RCPT命令用于标识单个邮件接收者,在MAIL命令后面可有多个RCPT命令。参数包括“TO:”字段及<forward-path>(前向路径),前向路径是指到达邮件接收者之前所经过的路径,前向路径中第一个主机是接收SMTP命令的主机。(www.xing528.com)

●DATA命令格式:DATA<CR-LF>命令用于将邮件报文发送给服务器。DATA命令在RCPT命令之后使用,声明邮件数据开始,邮件报文以只包含一个小数点的行结束。当邮件报文到达最终目的地后,会在前面添加上有关发送端、接收端及到达时间等信息。

●QUIT命令格式:QUIT<CR-LF>命令用于终止客户端与服务器之间的连接,服务器会返回一个代码为221的应答。

●RSET命令格式:RSET<CR-LF>命令用于中止当前的邮件事务并使两端复位,同时丢弃全部有关发送方、接收方或邮件的存储信息。

●VRFY命令格式:VRFY<SP><string><CR-LF>命令用于验证指定的用户/邮箱是否存在,即验证接收方地址是否正确。通常是系统管理员在查找邮件交付差错时手工使用的,由于安全方面的原因,服务器常禁止此命令。

●NOOP命令格式:NOOP<CR-LF>命令是空操作命令,它除了强迫服务器返回一个代码为200的OK应答外,不做任何事情。除上述SMTP最小实现所需的8条命令外,RFC 821还定义其他命令,见表11-1。

表11-1 RFC 821定义的SMTP其他命令

978-7-111-43162-6-Chapter11-4.jpg

(续)

978-7-111-43162-6-Chapter11-5.jpg

5.SMTP响应

每一条SMTP命令都会返回一条SMTP响应,SMTP响应与FTP响应相似,都是以<CR-LF>结束的一行NVTASCII格式的文本,包含一个3位数字的应答码,后面紧跟的是描述文本。SMTP应答码各位的含义与FTP应答码各位的含义基本相同(如1yz、2yz、3yz表示成功,4yz表示临时问题,5yz表示失败等),SMTP应答码的具体含义在RFC821中定义,而响应中的描述文本则可由邮件服务器管理员定义。表11-2列出RFC定义的应答码和含义。

表11-2 RFC中定义的SMTP应答码及其含义。

978-7-111-43162-6-Chapter11-6.jpg

6.电子邮件结构

邮件主要由邮件头(Header)和邮件正文(Body)两部分构成,两者之间用空行分隔。在邮件末尾,还有一个可选部分,用于进一步注明发件人身份的签名(Signature)。

为了更清晰地了解邮件头,分析下例:

978-7-111-43162-6-Chapter11-7.jpg

978-7-111-43162-6-Chapter11-8.jpg

邮件头开始几行内容表明发信人及传送邮件经过的路径。还包括日期、邮件标识号、主题、发信人地址和收信人地址等。邮件头每行都遵循“标题域:值”格式。标题域在邮件中常见以下几项。

●Received域:邮件每经一台主机时,就产生一个Received域,记录所经过主机的地址和经过时间,回复的信件可按原路返回,不必选择路由。此域为多行。

●Date域:记录邮件发送日期(本地主机的日期和时间)。

●Message-ID域:邮件唯一的标识号。

●From域:发信人邮件地址。

●To域:收件人邮件地址。

●Cc域:抄送邮件地址,当需要将邮件发送给多个收信人时使用。

●Reply-to域:回复邮件地址,当发信人有几个邮件账号,且要求对方回复地址,不是发信地址时所使用的地址。

Subject域:邮件主题。

以“X-”开始的域:这些域是在基本邮件系统基础上添加的属性,只有在发送和目的双方邮件服务器都支持这些属性的情况下,使用这些属性才有意义。

邮件正文即信件内容,是以NVTASCII格式表示的文本。程序、图形及其他二进制文件可作为电子邮件的附件发送,但需将二进制文件转换为文本格式才能写入邮件正文,目前大都采用MIME扩展来对各种不同类型的文件进行编码。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈