发送邮件相当于是要把邮件“推”到服务器上,读取邮件相当于是从服务器上把邮件“拉”过来,这两种动作使用的协议是不同的。
电子邮件传输所用到的这些协议都是在TCP的基础上的应用层协议。它们用以完成用户代理和邮件服务器进程之间或者不同邮件服务器进程之间的电子邮件传递工作。
1.SMTP
SMTP最新的规范文档是2008年发布的[RFC 5321]。SMTP是用来发送邮件的协议,就是说它描述的是把邮件从发件进程送到收件进程所执行的标准。其规定了两个电子邮件的处理进程如何通过不同的命令和应答交互信息以及如何进行邮件推送的规范。
SMTP规定了14个命令和21种应答信息。SMTP的每一条命令一般由四个字母组成。每一条应答信息都有一行字符,应答信息中最重要的是开头处的一个3位数字,数字后面一般会附上简单的说明信息,这种说明并非一定要有信息。SMTP的部分基本命令和部分应答信息代码见表6-1和表6-2。
表6-1 SMTP的部分基本命令
表6-2 SMTP的部分应答代码
两个支持SMTP的进程,就通过这些命令和应答信息互相交互,完成邮件传输的过程。
SMTP的处理过程主要包括以下三个步骤。
(1)建立连接。如果推送邮件的是用户代理,则一般会根据用户的操作开始传输电子邮件;如果是邮件服务进程,则一般会以若干分钟为周期扫描邮件缓存,以确定是否有新邮件;如果发现新邮件,就对它们逐一发送。
若要进行SMTP传输,首先要建立TCP连接。接收邮件推送的服务进程默认监听25号端口。若要某个邮件服务器推送电子邮件,就向该服务器的25号端口发出建立TCP连接请求。当TCP连接建立后,就可以进行SMTP的操作了。
当TCP连接成功建立,服务器就会发送代码为200的就绪信息。收到服务器的就绪信息后,发送方需要通过HELO命令表明自己的身份,如果发生在服务器之间,HELO命令后面就会附上域名信息。如果接收方服务器正常运行,则会回应代码为250的命令正确执行信息。至此,连接建立的工作进行完毕,可以进行邮件的传输工作了。
(2)传输邮件。邮件传输过程要输送电子邮件的各部分内容。需要发送的内容依次是:寄信人邮件地址、收信人邮件地址、邮件正文内容。
邮件发送方首先要通过MAIL FROM<寄信人地址>命令将寄件人的电子邮件地址传递给收件的SMTP服务器。如果服务器就绪,则回应代码为250的信息,表示命令被正确执行;否则就要依据问题情况发送其他代码的回应信息,比如451——处理时出错、452——存储空间不足等。
接下来发送方需要传递收信人地址。这需要通过执行RCPT TO<收信人地址>命令来实现。有多个收信人就需要多次执行。每次命令执行无误,接收服务器会给出代码为250的回应,否则,会给出类似550——无此用户——的回应。
邮件的正文传输从DATA命令开始。在接到DATA命令后,在正常情况下,接收服务器会返回代码为354的信息。这时,发送方便可以开始发送邮件正文了。如果有问题,接收方就会根据错误情况发送合适代码的回应信息。
当正文发送完毕,先按下“Enter”键,然后再按下“.+Enter”组合键便可以结束正文传输。此时,接收服务器也需要根据情况发送恰当代码的回应信息。
(3)释放连接。在邮件发送完毕之后,发送方需要使用QUIT命令来结束邮件传输过程并释放连接。SMTP服务器会返回代码为221的回应信息,表示同意释放TCP连接。邮件传输的全部过程就此结束。
图6-6所示为一次简单的邮件传输过程。发起推送邮件请求的客户机用C表示,接收服务器用S表示。
(www.xing528.com)
图6-6 一次邮件传输过程
2.POP3
POP3是一个非常简单的邮件读取协议,其功能较为有限。POP3的定义文档是[RFC 1939],与SMTP有些近似,也是提供一些命令,以交互式的方式来实现客户端与服务器之间的邮件传输。
用户代理可以使用的命令,有列出邮件的list命令,有要求返回指定邮件的retr命令,有要求删除指定邮件的dele命令。关于POP3的交互过程这里不准备赘述,只简单介绍这个协议工作的流程。
用户代理想要通过POP3下载邮件。首先需要打开一个到邮件服务器110端口上的TCP连接。当TCP连接建立后,POP3的工作过程可以分为三个步骤:认证、事务处理和更新。在认证阶段,用户代理需要发送用户名和口令,以登录到服务器上,好获得下载用户邮件的权限。在事务处理阶段,用户代理可以取回邮件,还可以对邮件进行一些管理操作,如获得邮件的列表、统计信息,给邮件设置删除标记或者取消删除标记等。在更新阶段,当用户向服务器发出了quit命令后退出登录,邮件服务器就将删除掉被标记为删除的邮件。
使用POP3处理邮件的用户代理一般对邮件读取提供两种工作方式:下载并删除和下载并保留。如果采用下载并删除方式处理电子邮件,那么当用户更换自己使用的计算机时,就无法再访问自己的邮件了。即使使用下载并保留方式,POP3也不给用户提供对服务器上的邮件进行管理的功能。人们一般还是要把邮件下载到本地进行管理。这对需要经常更换计算机上网的用户来说很不方便。
3.IMAP
为了解决POP3使用起来不方便的一些问题,人们又提出了另一个邮件读取协议——IMAP。IMAP功能较为强大,但也比POP3复杂很多。要使用IMAP读取邮件,用户需要使用支持该协议的用户代理。用户代理和邮件服务器上的IMAP服务程序建立TCP连接后,便可以通过用户代理在自己的机器上操纵邮件服务器的邮件。
IMAP服务器在管理邮件的时候,为每个邮件设置了一个文件夹属性,把邮件和一个文件夹联系起来。当报文第一次到达服务器时,它被放在收件人文件夹里。之后,收件人可以利用IMAP提供的命令,把邮件移到其他任意的文件夹,包括用户利用IMAP提供的命令自己创建并命名的新文件夹。
为了让用户更加方便地操作邮件,IMAP提供了很多新的命令。比如,创建文件夹的命令,在不同的文件夹间移动邮件的命令。IMAP还为用户提供了在服务器中查询邮件的命令,让邮件服务器按指定的条件去查找匹配的用户邮件。
利用这些功能更强大的命令,连入IMAP服务器的用户不仅可以像使用POP3那样对邮件进行阅读和删除等操作,还可以创建和管理文件夹,把邮件在文件夹中进行移动、搜索等操作。这样的操作,就如同在自己的个人计算机上操作本地的文件一样,十分方便。
此外,IMAP服务器还提供用户代理读取邮件部分组件的命令。例如,用户代理可以只读一个邮件的首部,或者是只读取除了附件以外的内容。在世界上,不是每个国家、每个应用场合下的网络条件都足够的好。在网速较慢或者可用流量不足的情况下,用户可以自行灵活地选择对邮件如何操作。
总体上而言,与POP3相比,IMAP的好处就是让用户可以使用不同的计算机随时随地且更方便、灵活地访问和处理自己的邮件。
从前面的学习了解到,无论是SMTP、POP3还是IMAP,它们的标准中提供的都是各种交互式的命令。如果只能使用这些交互式命令和邮件服务器进行互动,这对于普通用户来说是很不友好的。现在的各种用户代理软件都提供使用起来很方便的图形界面。其实,用户代理和服务器之间交互的当然还是协议中规定的各种命令和返回信息。只不过,用户代理会把用户的操作转换成合适的命令组合提交给服务器;也会把服务器的返回信息组织好,在图形界面上予以恰当的显示。这样才给每个普通用户带来了方便的使用体验。
4.基于Web的电子邮件
借助用户代理的帮助,人们可以方便地使用SMTP、POP3或者IMAP实现对邮件服务器的访问,但是,至少对于很多普通中国人来说,另一种基于Web的电子邮件却是最常使用,甚至是唯一使用过的电子邮件形式。一方面,因为中国的互联网建设铺开的时间相对欧美国家晚,所以一开始接触到的就是基于Web的电子邮件,从而没有对使用用户代理处理电子邮件产生路径依赖。更重要的原因是,基于Web的电子邮件使用起来更方便。
图6-7所示为基于Web的电子邮件的系统状况。从图中可以看到,普通用户,无论是发送电子邮件还是接收电子邮件,都不再使用SMTP、POP3、IMAP中的任何一种。他们可以只使用HTTP和邮件服务器进行通信,无论是编辑、上传邮件,还是读取、管理邮件,都使用浏览器通过HTTP搞定。只有邮件服务器之间的邮件传输仍然使用SMTP。设计得优良的基于Web的电子邮件服务,其方便性不输于任何一种应用代理,只需要浏览器更是其突出的优点。
图6-7 基于Web的电子邮件
使用用户代理虽然已经很方便了,但它毕竟还是一种专用的应用程序。虽然也被广泛安装,但是比起浏览器来肯定是有差距的。能使用每台计算机都必备的浏览器访问邮件服务器,对电子邮件的一切操作就像一次普普通通的上网一样简单,对每一个普通用户是更好的用户体验。
基于Web的电子邮件技术出现得较晚,它的出现是与Web技术的进步离不开的。早期的Web只能通过HTTP传送一些静态的网络文档。随着公共网关接口(Common Gateway In⁃terface,CGI)技术的不断进步(J2EE、PHP、.net都可以视为CGI范畴),用户可以和服务器进行更复杂的交互。一方面,服务器可以依据用户的输入,联合记录于服务器或者存储于客户端的用户状态,动态地生成用户看到的页面;另一方面,浏览器支持的类似JavaScript、CSS之类的活动文档技术,极大程度上丰富了页面的表现能力。这一切使得使用Web技术可以实现功能很复杂的应用。基于Web的电子邮件只是这琳琅满目的众多应用中普通的一种而已。使用基于Web的电子邮件访问,如同使用IMAP用户代理一样方便,只能算是Web技术展示的“小节目”。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。