简介
电子邮件是一种异步通信媒介,当用户方便时就可以进行收发邮件。一般将电子邮件系统分为3个主要组成部分:用户代理、邮件服务器、简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)
当用户写完邮件后,他的邮件代理就会向其邮件服务器发送邮件,此时邮件放在邮件服务器的外出报文队列中。
每个接收方在某个邮件服务器上有一个邮箱,这个邮箱管理和维护着发送给他的报文。
典型的邮件发送过程:
- 从发送方的用户代理开始
- 传输到发送方的邮件服务器
- 再传输到接收方的邮件服务器
- 然后在这里被分发到接收方的邮箱中
- 当接收方要在邮箱中读取该报文时,包含他邮箱的邮件服务器需要鉴别接收方的身份
- 当发送方的邮件服务器不能将邮件交付给接收方的服务器,发送发服务器就会在一个报文队列中保持该报文,并在以后尝试再次发送,一定次数后仍然不成功,服务器就删除该报文,并通知发送方
SMTP协议
SMTP是电子邮件的主要应用层协议,使用TCP可靠数据传输服务。
SMTP有两个部分:
- 运行在发送方邮件服务器的客户端
- 运行在接收方邮件服务器的服务器端
每台邮件服务器既运行SMTP的客户端,又运行SMTP的服务器端。当邮件服务器发送邮件时,它就表现为SMTP的客户,当接收邮件时,就表现为SMTP的服务器
SMTP已经存在很长时间,比HTTP要长很多,长久的时间导致了它有的特征已经陈旧了,如它限制所有邮件报文段的体部分(不只是其首部)只能采用ASCII码表示。
即在用SMTP传送邮件之前,需要将二进制多媒体数据编码为ASCIII码,并且在使用SMTP传输后,要求将相应的ASCII码邮件解码还原为多媒体数据。
使用SMTP的一次邮件发送:
- 用户Alice调用她的邮件代理程序并提供Bob的邮件地址,撰写报文,并只是用户代理发送该报文
- Alice的用户代理把报文发给她的邮件服务器,在那里该报文被放在报文队列中
- 运行在Alice的邮件服务器上的SMTP客户端发现了报文队列中的这个报文,它就创建一个到运行在Bob的邮件服务器上的SMTP服务器的TCP连接。
- 在经过一些初始SMTP握手后,SMTP客户通过该TCP连接发送Alice的报文
- 在Bob的邮件服务器上,SMTP的服务器端接受该报文。Bob的邮件服务器然后将该报文放入Bob的邮箱中
- 在Bob方便的时候,他调用用户代理阅读该报文。
可以发现:
- SMTP一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端也是这样。 如果接收方的邮件服务器没有开机,那么报文会保留在发送方邮件服务器,并等待进行新的尝试,不会在中间的某个邮件服务器保存。
- 两个邮件服务器之间的连接是通过TCP进行的,发送方邮件服务器的SMTP在25号端口建立一个到接收方服务器的SMTP的TCP连接
- 如果发送邮件服务器有几个报文发往同一个接收邮件服务器,就可以通过同一个TCP连接发送这些所有的报文。
STMP与HTTP的对比
SMTP和HTTP都是用于一台主机向另一台主机传送文件,当进行文件传送时,都是用持续连接。
区别:
- TCP连接的发起
- HTTP是一个拉协议,即文件预先装在Web服务器上,用户使用HTTP从该服务器拉取这些信息, TCP连接时想接收文件的机器发起的
- SMTP基本是一个推协议,即发送邮件服务器把文件推给接收邮件服务器,这个TCP连接是由要发送该文件的机器发起的。
- 注意,那么接收方从服务器获取邮件就不是通过SMTP协议了,因为那是一个拉操作,而SMTP是一个推协议
- SMTP要求报文使用ASCII码,而HTTP没有这种要求
- HTTP把每个对象封装到自己的HTTP响应报文中,而SMTP则把所有报文对象放在一个报文中
SMTP对报文的首部(不是协议本身)有要求,需要包含源邮件地址与目的邮件地址等
邮件访问协议
发送方为什么不能直接通过用户代理发送邮件到接收方的邮件服务器呢,因为如果不通过发送方邮件服务器,用户代理没办法到达一个不可达的目的地接收服务器。
接收方通过用户代理从服务器获取邮件,前面已经说过无法通过SMTP协议完成,因此引入了一个特殊的邮件访问协议,此协议将邮件服务器上的邮件传送给用户的本地PC。
- 第三版的邮局协议(POP3,Post Office Protoco Version 3)
- 因特网邮件访问协议(Internet Mail Access Protocol,IMAP)
电子邮件通信过程协议:
POP3
用户代理(客户)打开一个到邮件服务器端口110上的TCP连接后,POP3开始工作:
- 用户代理发送用户名和口令以鉴别用户
- 事务处理阶段:用户代理取回报文
- 此阶段,用户代理还可以对报文做删除标记、取消报文删除标记、获取邮件的统计信息
- 更新阶段:出现在客户发出了quit命令之后,目的是结束该POP3会话。
- 这时,邮件服务器删除那些被标记为删除的报文
IMAP
POP3协议是将邮件下载的本地,但是移动用户一般更喜欢在远程服务器上的文件夹中访问而不是下载到本地。POP3协议没有给用户提供任何创建远程文件夹并给报文指派文件夹的功能。
IMAP服务器把每个报文和一个文件夹联系起来,当报文第一次到达服务器,它与收件人的INBOX文件夹相关联,收件人则能够把邮件移到一个新的、用户创建的文件中,阅读邮件,删除邮件的。
IMAP协议为用户提供了在远程文件夹中查询邮件的命令,并允许用户创建文件夹,将邮件在文件夹中移动,与POP3不同,IMAP服务器维护了IMAP会话的用户状态信息,例如文件夹的名字以及哪些报文与哪些文件夹相关联。
IMAP还巨有允许用户代理获取报文组件的命令,比如可以只读取报文的某个部分,而不用消耗宽带资源完整的读取整个邮件。
基于Web的电子邮件
即用户与邮件服务器之间的通信通过HTTP协议进行,但是邮件服务器之间的通信仍然通过SMTP协议进行。
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/26/computerscience/2020-03-26-emailSMTP/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!