电子邮件发送协议 是一种基于“ 推 ”的协议,主要包括 SMTP ; 邮件接收协议 则是一种基于“ 拉 ”的协议,主要包括 POP协议 和 IMAP协议 ,在正式介绍这些协议之前,我们先给出邮件收发的体系结构:

 

        从上图可以看出邮件收发的整个过程大致如下:

       (1)发件人调用用户代理编辑要发送的邮件。

       (2)发件人点击屏幕上的”发送邮件“按钮,把发送邮件的 工作全部交给用户代理来完成。用户代理通过SMTP协议将邮件发送给发送方的邮件服务器(在这个过程中,用户代理充当SMTP客户,而发送方的邮件服务器则充当SMTP服务器)。

       (3)发送方的邮件服务器收到用户代理发来的邮件后,就把收到的邮件临时存放在邮件缓存队列中,等待时间成熟的时候再发送到接收方的邮件服务器(等待时间的长短取决于邮件服务器的处理能力和队列中待发送的信件的数量 )。

       (4)若现在时机成熟了,发送方的邮件服务器则向接收方的邮件服务器发送邮件缓存中的邮件。在发送邮件之前,发送方的邮件服务器的SMTP客户与接收方的邮件服务器的SMTP服务器需要事先建立TCP连接,之后再将队列中 的邮件发送出去。值得注意的是,邮件不会在因特网中的某个中间邮件服务器落地 。

       (5)接收邮件服务器中的SMTP服务器进程在收到邮件后,把邮件放入收件人的用户邮箱中,等待收件人进行读取。

       (6)收件人在打算收信时,就运行PC机中的用户代理,使用POP3(或IMAP)协议读取发送给自己的邮件。 注意,在这个过程中,收件人是POP3客户,而接收邮件服务器则是POP3客户,箭头的方向是从邮件服务器指向接收用户,因为这是一个“拉 ”的操作 。

       下面我们根据上面的总体过程介绍下各个组件。

        1.用户代理

        用户代理UA ( User Agent )是一个软件包(程序),它的功能是:撰写、阅读、回复和转发报文,还能处理邮箱(如创建收信箱和发信箱)。共有两种类型的用户代理: 命令驱动 和GUI 。 命令驱动 属于早期的电子邮件,通过命令发送和接收邮件,而GUI 则是包含图形界面,允许用户使用键盘和鼠标与软件进行交互。 

 

       2. SMTP协议

        SMTP协议 服务器的熟知端口号为25 ,与之前总结过的telnet协议和FTP协议类似的地方是,SMTP协议的客户端和服务器端都是通过命令和响应的形式进行交互 ,即SMTP客户通过命令向SMTP服务器发送操作请求,而服务器则通过3位的数字对响应的请求作出响应。SMTP规定了14条命令和21中应答信息,每条命令有4个字母组成,而每一种应答一般只有一行信息,有一个3位数字的代码开始,后面附上很简单的附加说明。

       邮件传送主要包括3个阶段: 建立连接 、 邮件传送 和 终止连接 。

       建立连接阶段:

       1.当SMTP客户端每隔一定时间对邮件缓存扫描一次,如发现有邮件,就使用SMTP的熟知端口号25与接收方的邮件服务器的SMTP服务器建立TCP连接。

       2.接收方SMTP服务器发出“220 Service ready"告诉客户端它已经准备好接收邮件。若服务器未就绪,它就发送代码421(服务器不可用)。

       3.客户发送HELO报文,并使用它的域名地址标志自己。目的是:用来把客户的域名通知服务器,值得注意的是, 在TCP的连接建立阶段,发送方和接收方都是通过它们的IP地址来告诉对方的 。(HELO报文是最初的,用户名和密码都不加密。现在改为EHLO,用户名和密码都进行base64编码发送

       4.服务器响应代码250(请求命令完成)或根据情况的其他一些代码。

      报文传送阶段:

       在SMTP客户与服务器之间建立连接后,发件人就可以与一个或多个收件人交换单个的报文了。若收件人超过一个,则下面步骤3和步骤4将重复进行。

        1.客户发送MAIL FROM报文介绍报文的发送者。它包括发送人的邮件地址(邮箱名和域名,如house@qq)。这个步骤是必要的:因为可以给服务器在返回差错或报文时的返回邮件地址 。

        2.服务器响应代码250(请求命令完成)或其他适当的代码。

        3.客户发送RCPT(收件人)报文,包括收件人的邮件地址,RCPT命令的作用是 : 先弄清接收方系统是否已经准备好接收邮件的准备,然后才发送邮件,这样做视为了避免浪费通信资源,不至于发送了很长的邮件以后才知道是因地址错误 。

        4.服务器响应代码250或其他适当的代码。

        5.客户发送DATA报文对报文的传送进行初始化,DATA命令表示要开始传送邮件的内容了。

        6.服务器响应代码"354 Start mail input: end with <CRLF>.<CRLF>"或其他适当的报文(如421 服务器不可用,500 命令无法识别)。

        7.客户用连续的行发送报文的内容。每一行的行结束时输入 <CRLF>.<CRLF> ,即回车换行.回车换行,表示邮件内容结束。

        8.服务器响应代码(250 请求命令完成)或其他适当的代码。

        值得注意的是:虽然SMTP使用TCP连接试图使邮件的传送可靠,但它并不能保证不丢失邮件。也就是说,使用SMTP传送邮件只能说可以可靠地传送接收方的邮件服务器,在往后的情况就不知道了。接收方的邮件服务器也许会出故障,使收到的服务器全部丢失(在收件人读取信件之前)。

        终止连接

        在报文传送成功后,客户就终止连接。包括如下步骤:

        1.客户发送QUIT命令。

        2.服务器响应221(服务关闭)或其他代码。

        在连接终止阶段后,TCP连接必须关闭。

        3.POP协议

        POP协议, Post office Protocal 。邮件交付的第一阶段和第二阶段使用SMTP,而第三阶段则使用邮件读取协议。SMTP是一个push协议,而第三阶段则使用pull协议,包括POP和IMAP协议,POP主要使用POP3,而IMAP协议则主要使用IMAP4 。

        POP3采用C/S的工作方式。在接收邮件的用户PC机中的用户代理UA必须运行POP3的客户程序,而在收件人所连接的ISP的邮件服务器中则运行POP的服务器程序。POP服务器只有在用户输入鉴别信息(用户名+密码)后,才允许对方对邮箱进行读取 。

        POP3有 两种工作方式 :删除方式和保存方式。删除方式 就在每一次读取邮件后就把邮箱中的这个邮件删除, 保存方式 就是在读取邮件后仍然在邮箱中保存这个邮件,该方式是通过对之前的POP3工作方式(即删除)的缺点进行弥补,对功能进行扩充。

         4. IMAP协议

        IMAP协议, Internet Mail Access Protocal (因特网邮件读取协议)。 IMAP协议比POP3协议复杂的多,也是按照C/S的工作方式,现在较新的版本是IMAP4。

        在使用IMAP时,用户的PC机上运行IMAP客户程序,然后与接收方的邮件服务器上的IMAP服务器程序建立TCP连接。 POP3不允许用户在邮件服务器上整理自己的邮件,用户在服务器上不能不同的文件夹,POP3也不允许用户在下载邮件之前读取邮件的部分内容,而IMAP则克服了这些POP3的缺点,说白了就是POP3协议不太愿意让用户直接操作服务器,而IMAP正好客户了这些缺点 。

        IMAP4提供了以下功能( 这些功能POP3则没有 ):

        1.用户在下载邮件之前可以检查邮件的首部。

        2.用户在下载邮件之前可以用特定的字符串搜索电子邮件的内容。

        3.用户可以部分地下载电子邮件。

        4.用户可以在邮件服务器上创建、删除邮箱,或对邮箱重命名。(IMAP是双向的,可以同步本地修改到服务端;POP只能同步服务端到本地

        5.为了存放电子邮件,用户可以在文件夹中创建分层次的邮箱。

        注意 :不用把邮件的发送协议SMTP协议与邮件的读取协议POP或IMAP协议弄混淆了。发送人的UA向发送邮件服务器发送邮件,以及发送方的邮件服务器向接受方的邮件服务器发送邮件都是采用SMTP协议,而收件人的UA从邮件接收服务器中接收文件则采用的是POP协议或IMAP协议。

       5. MIME

        MIME协议( Multipurpose Internet Mail Extensions ),通用因特网邮件扩充协议 ,作为SMTP的一种辅助协议,其引入是为了克服SMTP的如下不足:

        1.SMTP只能发送使用NVT( 虚拟网络终端 ) 7位ASCII码格式的报文,它不能使用NVT 7位ASCII码不支持的语言(如汉语,日语,德语等)。

        2.SMTP不能传送可执行文件或其他二进制对象(如图像文件)。

        3.SMTP不支持音频或视频文件。

        4.SMTP发送的邮件的长度受到限制。

        为了克服以上的不足,便引入了MIME协议,MIME协议是一种扩展协议性的辅助协议,“扩充”指的是只是对原来协议的扩展,而不是取代。它允许非ASCII码数据能够通过电子邮件传送。MIME在发送方把非ASCII码数据转换为NVT ASCII数据,之后的工作再交给SMTP完成,在接收方再将NVT ASCII数据还原成原来的数据。MIME的体系结构如下:

       MIME定义了5种首部,用来加在原始的电子邮件部分以定义参数的转换,这五种首部分别是: MIME-Version(MIME版本 )、 Constent-Type ( 内容类型 )、 Content-Transfer-Encoding ( 内容-传送-编码 )、 Content-Id ( 内容-标识 )和 Content-Description ( 内容描述 )。

        MIME版本 :定义了MIME使用的版本。

       内容-类型 :定义报文主体使用的数据类型和子类型,用<数据类型/子类型>表示。

        内容-传送-编码 :定义了邮件的主体在传送时是如何编码的。

       内容-标识 :在多报文的环境中唯一地标识报文。

        内容描述 :定义了主体是否为图像、音频或视频。

        6. 基于WWW的邮件

        基于WWW的邮件收发系统的体系结构与普通的电子邮件收发系统不同,基于WWW的邮件收发系统的整个过程描述如下:

        1.从发送者的浏览器传送到发送方邮件服务器是通过HTTP协议(而一般的则是通过SMTP协议)。

        2.从发送方服务器到接收方邮件服务器是通过SMTP协议(与一般的相同)。

        3.从接收方到接收者是通过HTTP协议(而一般的则是POP3协议或IMAP协议)。

        具体如下图所示:

参考资料

[1]《计算机网络(第5版) 谢希仁》

[2]《TCP/IP协议族 第4版》

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐