[计算机网络-应用层] 因特网中的电子邮件
下图是因特网电子邮件系统的总体情况,从该图中我们可以看出它有3个重要组成部分:用户代理(user agent)、邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)。
用户代理允许用户阅读、回复、转发、保存和撰写报文。
邮件服务器组成了电子邮件体系结构的核心。每个接收方在其中的某个服务器上有一个邮箱。邮箱包含用户的到达报文、离开(将发送)邮件报文的报文队列;在发送电子邮件报文的邮件服务器之间采用SMTP协议。
SMTP是因特网电子邮件中主要的应用层协议。它使用TCP可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。
SMTP
·使用TCP从客户机到服务器可靠地传输电子邮件报文,用端口25。
·直接传输:发送服务器到接收服务器。
·传输的三个阶段:握手 (欢迎)、报文的传输、关闭。
·命令/响应交互
命令: ASCII文本
响应: 状态码和短语
·报文必须以7比特ASCII格式。
为了描述SMTP的基本操作,下面来模拟一下Alice给Bob发送一封简单的ASCII报文的过程:
1) Alice使用UA写作报文并向 bob@someschool.edu 发送
2) Alice的UA向其邮件服务器发送报文;报文放置在报文队列中
3) SMTP的客户机侧打开与Bob的邮件服务器的TCP连接
4) SMTP通过TCP连接发送Alice的报文
5) Bob的邮件服务器将该报文放入Bob的邮箱
6) Bob调用其用户代理来读报文
大家可使用Telnet与SMTP服务器进行直接对话,使用的命令是 telnet serverName 25
我曾编写过一个C++程序来通过telnet模拟了一次SMTP回话过程:http://www.cnblogs.com/lca1826/p/6562016.html
下面来看一下SMTP与HTTP的对比:
HTTP: 拉协议
SMTP: 推协议
HTTP: 每个对象封装在其自己的响应报文中
SMTP: 所有报文对象放在一个报文中
SMTP要求全部7位ASCII码格式传输,HTTP无此要求
两者都有ASCII 命令/响应交互,状态码
邮件报文格式
一个典型的报文首部如下:
From: alice@crepes.fr To: bob@hamburger.edu Subject: Searching for the meaning of life.
在报文首部之后,紧接着是一个空白行,然后是以ASCII格式表示的报文主体。
MIME:
由于在RFC 822中描述的报文首部只适合于发送普通ASCII文本,不能充分满足多媒体报文(如带有图片、音频和视频的报文)或携带有非ASCII文本格式(例如,非英语语言所使用的字符)的报文的需求。为发送非ASCII文本的内容,发送方的用户代理必须在报文使用附加的首部行。这些额外的首部行定义在RFC 2045和RFC 2046中,多用途因特网邮件扩展(MIME)是对RFC 822的扩展。
支持多媒体的两个关键MIME首部是Content-Type:和Content-Transfer-Encoding:。
Content-Type:首部行允许接收用户代理对报文采取适当的动作。
Content-Transfer-Encoding:首部行提示接收用户代理该报文主体已经使用了ASCII编码,并指出了所用的编码类型。
接收服务器一旦接收到具有RFC 822和MIME首部行的报文,就在该报文的顶部添加一个Received:首部行;该首部行定义了发送该报文的SMTP服务器的名称(from),接收该报文的SMTP服务器的名称(by),以及接收服务器接收到的时间。
有时一个邮件有多个Receive:行,这是因为有的邮件在发送方和接收方之间的路径要经过不止一个SMTP服务器转发。
邮件访问协议
在上述分析中,有一个疏漏的环节,那就是在Alice向Bob发送邮件的过程中,Bob是如何通过运行在他本地PC上的用户代理,获得位于某ISP的邮件服务器上的他的邮件呢?注意到Bob的用户代理不能使用SMTP来取回邮件,因为取邮件时一个拉操作,而SMTP是一个推协议。因此我们要引入邮件访问协议。
SMTP: 交付/存储到接收方服务器
邮件访问协议:从服务器获取邮件
·POP3:第三版邮局协议 [RFC 1939]
·IMAP:互联网邮件访问协议 [RFC 1730]
·HTTP:Hotmail , Yahoo! Mail等
下面来主要介绍一下POP、POP3和IMAP的定义和区别:
POP3
POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,是TCP/IP协议族中的一员(默认端口是110)。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件。
POP与POP3
POP协议支持“离线”邮件存储转发处理:客户端程序连接服务器,下载所有未阅读的电子邮件;一旦将邮件从邮件服务器端送到客户端上,邮件服务器上的邮件将会被删除。目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP协议。
POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
IMAP
IMAP全称是Internet Mail Access Protocol,即互联网邮件访问协议,是一个应用层协议(端口是143)。用来从本地邮件客户端(Outlook Express、Foxmail、Mozilla Thunderbird等)访问远程服务器上的邮件。
IMAP和POP3的区别
IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP和POP3是邮件访问最为普遍的Internet标准协议。不同的是:
(1)IMAP提供Webmail与电子邮件客户端之间的双向通信,客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上(如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的)。而POP3在客户端的操作不会反馈到服务器上。
(2)IMAP更好地支持了从多个不同设备中随时访问新邮件。
(3)IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。
(4)POP3需要下载未阅读的邮件,IMAP可以不用把所有的邮件全部下载,而是通过客户端直接对服务器上的邮件进行操作。所有通过IMAP传输的数据都会被加密,从而保证通信的安全性。
(5)IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件。