电子邮件有三个主要的组成部分:用户代理,邮件服务器和简单的邮件传输协议(SMTP),我们几天主要来说一下在应用层中的SMTP协议,它使用TCP可靠数据传输服务,像大多数应用层协议一样,SMTP也有俩个部分:运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端,每台邮件服务器既运行SMTP服务器端也运行SMTP客户端。
SMTP发送邮件之前需要将二进制多媒体编码为ASCII码,并且在使用SMTP传输后要求将相应的ASCII码邮件解码还原为多媒体数据,我们知道的是HTTP传输前不需要将多媒体数据编码为ASCII码。
为了通俗的理解SMTP原理,我们来看下面这个案例:
- ymm调用他的邮件代理程序并提供jay的邮件地址,写好以后,指示用户代理发送该报文。
- ymm的用户代理把报文发给他的邮件服务器,在那里报文被放入报文队列中
- 运行在ymm的邮件服务器上的SMTP客户端发现了报文队列中的这个报文,它就创建一个到运行在jay的邮件服务器上的SMTP服务器的TCP连接
- 在经过一些初始SMTP握手后,SMTP客户通过该TCP连接发送ymm的报文
- 在jay的邮件服务器上,SMTP的服务器端接收报文,jay的邮件服务器然后将该报文放入jay的邮箱中
- 在jay方便的时候,调用用户代理阅读该报文
STMP一般不使用中间邮件服务器发送邮件,即便这俩个服务器距离很远也是这样的。
对比http协议
http更像一个拉协议,服务商在Web上装载信息,用户使用HTTP从该服务器拉取这些信息,
SMTP更像一个推协议,发送邮件服务器把文件推向接收邮件服务器
SMTP要求每个报文采用7bitASCII字符或二进制数据,则该报文必须按照7bitASCII码进行编码,Http则不受这种限制
当遇到出来一个既包含文本又包含图形的文档,Http把每个对象都封装到它自己的http响应报文中,二SMTP则把所有的报文对象放在一个报文中