第10章电子邮件协议本章学习目标理解电子邮件系统的基本原理了解E-mail地址的结构描述收发邮件时所使用的主要协议(SMTP,POP3,IMAP4)了解SMTP的工作原理了解MIME在电子邮件系统中的作用电子邮件(E-mail)电子邮件是一种用电子手段提供信息交换的现代邮政通信方式,电子邮件让人们能方便快捷地传递信息,让世界各地的人们之间能够轻松地交流电子邮件与传统的信件通信方式相比有着巨大的优势:传递迅速:在数分钟之内可到达地球上任何一个地方信息多样:除文字外,还可包含图片、音乐、动画、视频等多媒体信息,也可以附带上软件、数据等资料方便高效:只要能连接到Internet,就可以随时随地地收发E-mail,而且只需极少的费用10.1电子邮件系统电子邮件与之前介绍的TELNET和FTP服务不同,它不是一种“终端到终端”的服务,而是使用了“存储转发式”的服务,这是一种异步通信方式通过存储转发可以进行非实时通信,即信件发送者可随时随地发送邮件,不需要接收者同时在场邮件服务器是24小时连接到网络的高性能、大容量的计算机,在服务器的硬盘上为用户分配一定的存储空间,作为用户的“邮箱”用户可通过用户名和密码来登录“邮箱”,并进行发信、收信、编辑、转发、存档等各种操作10.1.1ISO/OSI电子邮件系统MOTIS电子邮件系统分为两部分用户代理UA:为用户提供良好的操作界面,并负责生成与处理消息信息传输代理MTA:主要负责消息传输,即所谓的“电子邮局”在电子邮件系统的具体实现中,UA一般位于个人计算机内,而MTA一般位于邮件服务器中MOTIS的电子邮件传输是存储转发型的,其中的MTA扮演网关的角色,邮件经逐个MTA传输直至信宿用户所在的MTA发送者接收者UAUAMTAMSMTAMS表示层MOTIS电子邮件系统的模型10.1.2TCP/IP电子邮件系统TCP/IP电子邮件系统在概念上也分为用户界面和邮件传输两部分,但邮件传输部分并未独立出来,形成一个类似MOTIS中MTA的组件,这是因为TCP/IP自始至终坚持端到端的思想,TCP/IP电子邮件系统也采用端到端的传输方式TCP/IP中采用spooling(假脱机)缓冲技术来解决延迟传递(delayeddelivery)问题,将用户收发邮件与实际的邮件传输区别开来10.1.2TCP/IP电子邮件系统用户界面发送邮件的spool区接收邮件的邮箱客户端(后台发送)服务器(接收邮件)用户发送邮件用户接收邮件发送邮件的TCP连接接收送邮件的TCP连接采用spooling技术的电子邮件系统10.1.3电子邮件协议收发电子邮件在的过程中,要遵循一些基本协议和标准,这些协议和标准保证电子邮件在各种不同的网络与操作系统之间能够正确地进行传输常见的电子邮件传输协议主要有以下三种:MIMESMTP(简单邮件传输协议):最常用的电子邮件传送协议POP3(邮局协议):最常用的电子邮件接收协议IMAP4(网络邮件访问协议):POP3的一种替代协议,提供了邮件检索和邮件处理的新功能目前,大多数邮件服务器都安装了SMTP和POP3这两项协议,即SMTP服务器作为邮件发送服务器,POP3服务器作为邮件接收服务器10.1.4电子邮件地址的格式电子邮件地址的一般格式如下:username@domain-namedomain-name是电子邮件服务器的域名username是在该服务器上注册的用户名,也即用户电子邮箱名称用户名与域名之间用符号“@”分隔开书写E-mail地址时要注意,地址中不能包含空格,无论是用户名、域名还是@的两侧都不能包含空格;不同邮件服务器对用户名包含的字符有不同的要求,一般用小写,有时也包含大写或特出字符。10.2SMTP协议SMTP协议的作用是:当发送方计算机与支持SMTP协议的电子邮件服务器连接时,将电子邮件由发送方计算机准确无误地传送到接收方的电子邮箱中SMTP的一个重要特点是它能够在传送中接力传送邮件,即邮件可以通过不同网络上的主机接力式传送SMTP一个相对简单的基于文本的协议。通过SMTP发送的所有电子邮件都是普通文本格式的,它不能直接传输图像、声音等非文本信息,但可以应用MIME标准将二进制文件编码后再通过SMTP传输。ESMTP解决了明码传输的不安全的问题。10.2.1SMTP的工作原理发送SMTP接收SMTP文件系统文件系统用户SMTP命令SMTP响应邮件内容SMTP通信模型示意图发送SMTP在接到用户的邮件请求后,判断此邮件是否为本地邮件,若是则直接投送到用户的邮箱,否则建立一条到远程接收SMTP的双向传输通道,这里的接收SMTP可以是最终接收者,也可以是中间传送者。此后,SMTP命令从发送SMTP发出,由接收SMTP接收,而SMTP应答则反方向传送。SMTP命令、响应以及邮件内容均使用NVTASCII格式的文本10.2.2SMTP连接与发送SMTP是一种请求响应协议,客户端发送命令,服务器返回响应,两者通过这种方式进行交互,以完成邮件传输过程的三个阶段:建立连接、传输数据和终止连接。客户端主动连接到服务器的25端口,建立TCP连接。服务器会发送一个应答码为220的问候报文,表示已经准备就绪。客户端向服务器发送HELO命令,用以标识发送方的身份,HELO命令的参数必须是一个合法的主机名。如果服务器接受了连接请求,会给客户端返回一个代码为250的应答,表示可以开始报文传输。客户端发送MAIL命令标识邮件的发送方,通过FROM参数指定发送方的电子邮件地址。如果服务器准备接收邮件,则返回代码为250的OK应答。客户端发送RCPT命令标识邮件的接收方,通过TO参数指定接收方的电子邮件地址,如果有多个接收人,可以发送多个RCPT命令。如果服务器能够识别接收人,则会返回代码为250的OK应答,否则返回代码为550的失败应答。客户端与服务器之间的协商结束,客户端发送DATA命令指示将要发送邮件数据,服务器端返回应答码为354的响应进行确认,表示可以开始邮件输入。客户端将邮件内容按行发送,邮件的末尾由客户端指定,是只有一个小数点(邮件数据结束指示器)的一行,服务器检测到邮件数据结束指示器后,返回代码为250的OK应答。客户端发送QUIT命令终止连接。10.2.3SMTP命令SMTP命令和FTP命令一样,都是使用NVTASCII格式的文本,以明文传输的。SMTP简捷的原因之一是它使用的命令少,SMTP的最小实现仅需要8种命令就够了常用SMTP命令一览表命令描述HELO用于启动邮件传输过程,以发送方主机域名来标识身份。MAIL用于初始化邮件传输RCPT用于标识单个邮件接收人,在MAIL命令后面可有多个RCPT命令DATA用于将邮件报文发送给服务器QUIT用于终止客户端与服务器之间的连接RSET用于中止当前的邮件事务并使两端复位VRFY用于验证指定的用户/邮箱是否存在,即验证接收方地址是否正确NOOP空操作命令10.2.4SMTP响应每一条SMTP命令都会返回一条SMTP响应,SMTP响应与FTP响应很相似,包含一个3位数字的应答码,后面跟着的是描述文本代码描述代码描述211系统状态或系统帮助响应500命令不可识别或语法错214帮助信息501参数语法错220服务准备就绪502命令不支持221关闭连接503命令顺序错250请求操作就绪504命令参数不支持251非本地用户,转发到forward-path550操作未执行:邮箱不可用354开始邮件输入,以CR-LF.CR-LF结束551非本地用户,请尝试forward-path421服务不可用552操作中止:存储空间不足450操作未执行:邮箱忙553操作未执行:邮箱名不正确451操作中止:本地错误554传输失败452操作未执行:存储空间不足SMTP应答码10.2.5电子邮件的结构电子邮件的主要结构:邮件头(Header)用于分隔邮件头与邮件正文的空行邮件正文(Body)签名(Signature)(位于邮件末尾的可选部分)10.2.5电子邮件的结构邮件头的每一行都遵循“标题域:值”的格式Received:fromtaurus.zsu.edu.cn(unknown[202.116.64.3])bybjmx3(Coremail)withSMTPidtYECALSfOkFDAEAD.1fortonny@tom.com;Sun,05Sep200413:10:25+0800(CST)X-Originating-IP:[202.116.64.3]Received:fromRsProxy([192.168.48.120])bytaurus.zsu.edu.cn(8.11.5/8.11.5)withSMTPidi855ABU27225fortonny@tom.com;Sun,5Sep200413:10:12+0800(CST)Message-ID:000801c49306$85c53fc0$7830a8c0@zsu.edu.cnFrom:jimmyjimmy@taurus.zsu.edu.cnTo:tonny@tom.comSubject:=?gb2312?B?z/vPog==?=Date:Sun,5Sep200413:09:27+0800MIME-Version:1.0Content-Type:multipart/alternative;boundary=----=_NextPart_000_0005_01C49349.92912D20X-Priority:3X-MSMail-Priority:NormalX-Mailer:MicrosoftOutlookExpress6.00.2800.1106X-MimeOLE:ProducedByMicrosoftMimeOLEV5.50.4522.1200邮件头示例→10.2.5电子邮件的结构邮件中常见的标题域:Received域:邮件每经过一台主机时,就产生一个Received域,用来记录所经过主机的地址和经过时间,回复的信件可以按原路返回,而不必去选择路由。此域常拆为多行显示。Date域:记录邮件发送日期(本地主机的日期和时间)。Message-ID域:邮件惟一的标识号。From域:发信人邮件地址。To域:收信人邮件地址。Cc域:抄送邮件地址,需要将邮件发送给多个收信人时使用。Reply-to域:回复邮件地址,当发信人有几个邮件账号,且要求对方回复的地址不是发信地址时使用。Subject域:邮件主题。以“X-”开始的域:这些域是在基本邮件系统的基础上添加的属性,只有在发送和目的双方邮件服务器都支持这些属性的情况下,使用这些属性才有意义。10.3POPPOP是一种邮件接收协议,其作用是:当用户计算机与支持POP协议的电子邮件服务器连接时,把存储在该服务器的电子邮箱中的邮件准确无误地下载到用户的计算机中POP3属于离线式协议,即不能对邮件进行在线操作,必须下载到本地才能进行处理。离线工作方式适合于那些从固定计算机上接收邮件的用户使用,因为邮件必须从服务器上删除。POP协议已发展到第三版,称作POP310.3POPPOP3与SMTP一样都是请求响应协议,命令与响应也都是用NVTASCII格式的文本表示POP3响应由一个状态码和其后的附加信息组成,只有两种状态码:“+OK”(正确)和“-ERR”(失败)常用POP3命令命令及格式描述USERusername指定用户名PASSpassword指定密码STAT询问邮箱状态(如邮件总数和总字节数等)LIST[Msg#]列出邮件索引(邮件数量和每个邮件的大小)RETR[Msg#]取回指定的邮件DELE[Msg#]删除指定的邮件NOOP空操作RSET重置所有标记为删除的邮件,用于撤消DELE命令QUIT提交修改并断开连接10.3POP在POP3中,客户端与服务器连接时有三种处理状态:身份验证状态事务处理状态更新状态当