(学习笔记)应用层协议之电子邮件——SMTP

因特网中的电子邮件

1 电子邮件系统

电子邮件系统有 3 个主要组成部分:
用户代理( uses agent) ,邮件服务器(mail server)和简单邮件传输协议(Simple Mail Transfer Protocol)。

    用户代理就是邮件客户端允许用户阅读、回复、转发、保存和撰写邮件。可以认为 Web浏览器也是一种用户代理,因为现在很多人都使用浏览器处理邮件。
    邮件服务器组成了电子邮件体系结构的核心。每个接收方在他的邮件服务器上有一个邮箱,邮箱管理和维护用户接收到的邮件。
    一个典型的邮件发送过程是从发送方的用户代理开始的,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。当接收方在他的邮箱中访问邮件时,接收方邮件服务器会鉴别用户的身份(使用用户名和口令)。

如果报文发送不成功怎么办?

    发送方服务器不能将邮件交付到接收方服务器时,会在一个消息队列中保持该邮件并在以后尝试再次发送。通常每 3 分钟左右进行一次尝试,如果几天后仍不能成功,服务器删除该邮件并以电子邮件的形式通知发送方。

    SMTP 是因特网电子邮件应用的核心。SMTP 用于从发送方的邮件服务器发送邮件到接收方的邮件服务器。
    SMTP 限制所有邮件消息的主体部分(不仅是其首部)只能采用简单的 7 位 ASCll 码表示。 在用 SMTP 传送邮件之前,需要将二进制多媒体数据编码为 ASCll 码,并且在使用 SMTP 传送后需要将相应的 ASCll 码邮件解码还原为多媒体数据。

邮件消息:二进制——>ASCII——>二进制

    SMTP 一般不使用中间邮件服务器发送邮件。
 

SMTP 客户机和服务器的一次交互

telnet smtp.163.com 25
S: 220 163.com
C: HELO localhost
S: 250 OK
C: AUTH LOGIN //使用身份认证登陆指令
S: 334 dXNlcm5hbWU6
C: cmVkc29zMw== //输入已经 base64_encode()的用户名
S: 334 UGFzc3dvcmQ6
C: MbM2MDQ3NQ== //输入已经 base64_encode()的密码
S: 235 Authentication successful
C: MAIL FROM: [email protected]
S: 250 [email protected]… Sender ok
C: RCPT TO: [email protected]
S: 250 [email protected] … Recipient ok
C: DATA
S: 354 Enter mail, end with “.” on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger.edu closing connection

     SMTP 用的是持久连接,如果发送邮件服务器有几个邮件发往同一个接收邮件服务器,它可以通过同一个 TCP 连接发送所有这些邮件。对每个邮件,客户机都用一个新的 MAIL FROM 开始,用一个独立的句点指示该邮件的结束,并且仅当所有邮件发送完后才发送 QUIT。

2 与 HTTP 的对比

     SMTP 和 HTTP 这两个协议都用于从一台主机向另一台主机传送文件。
    HTTP 从 Web 服务器向、浏览器、传送文件(也称为对象),SMTP 从一个邮件服务器向另一个邮件服务器传送文件(即电子邮件)。
    当进行文件传送时,持久 HTTP 和 SMTP 都使用持久连接。
    区别首先在于 HTTP 是一个拉协议,用户使用它从该服务器拉取信息SMTP 基本上是一个推协议,即发送邮件服务器把文件推向接收邮件服务器。特别是,这个 TCP 连接是由要发送文件的机器发起的。
    第二个区别就是我们前面间接提到过的,SMTP 要求每个消息(包括它们的主体)都使用7 位 ASCII 码格式。HTTP 数据则没有这个限制。
    第三个重要区别在于如何处理一个既包含文本又包含图形的文件,HTTP 把每个对象封装到单独的 HTTP 响应消息中,而电子邮件则把所有消息对象放在一个消息之中
    最后一个重要区别是 HTTP 使用带内控制,而 SMTP 使用带外控制

3 邮件消息格式和 MIME

     电子邮件的每个首部行都包含了可读的文本,它们是由关键词后跟冒号、值组成的。某些关键词是必需的,有些则是可选的。
     每个首部都必须含有一个 From:首部行和一个 To:首部行,可以包含一个 Subject:首部行或者其他可选的首部行。在邮件首部之后,紧接着是一个空白行,然后是以 ACII 格式表示的邮件主体。
    非 ACCII 码数据的 MIME 扩展
    多用途因特网邮件扩展(Multipurpose Internet Mail Extension, MIME)是对电子邮件格式的扩展。支持多媒体的两个关键首部是 Content-Type 和 Content-transfer-Encoding。
Content-Type:首部允许接收用户代理对邮件采取适当的动作。例如,通过它指出消息主体包含一个图形,接收用户代理可以为消息主体启用一个图形的解压缩程序。
Content-transfer-Encoding:首部行提示接收用户代理该消息主体已经使用了 ASCII 编码,并指出了所用的编码类型。因此,当用户代理接收到包含这两个首部行的邮件时,就会根据Content-transfer-Encoding 的值将邮件主体还原成非 ASCII 的格式。

4 邮件访问协议

     一旦 SMTP 将邮件从发送方的邮件服务器交付给接收方的邮件服务器,该邮件就被放入了收件人的邮箱中。用户可以通过在用户端系统上运行一个用户代理(电子邮件客户端)来阅读电子邮件。目前有多个流行的邮件访问协议,包括第三版的邮局协议(Post Office Protocol Version3,POP3)、因特网邮件访问协议(Internet Mail Access Protocol,IMAP)以及 HTTP。
 

•POP3

    POP3 是一个非常简单的邮件访问协议,其功能相当有限。
    当用户代理(客户机)打开了一个到邮件服务器(服务器)端口 110 上的 TCP 连接后,POP3就开始工作了。
    POP3 按照三个阶段进行工作:认证(authorization),事务处理以及更新。

在第一个阶段,即特许阶段,用户代理发送(以明文形式)用户名和口令以鉴别用户。
在第二个阶段,即事务处理阶段,用户代理取回邮件,在这个阶段,用户代理还能进行如下操作;对邮件做删除标记,取消邮件删除标记,以及获取邮件的统计信息。
在第三个阶段,即更新阶段,它出现在客户机发出了 quit 命令之后,目的是结束该 POP3 会话;这时,邮件服务器删除那些被标记为删除的邮件。

    特许阶段有两个主要的命令:user< user name>和 pass< password>。
    事务处理过程。使用 POP3 的用户代理通常由用户配置为“下载并删除”或者“下载并保留”方式。
下载并删除方式,用户代理发出 list,retr 和 dele 命令。用户代理从邮件服务器取回每封邮件并删除它们在服务器上的备份。当邮件接收方希望从多个不同的机器访问他的邮件,如从办公室的 PC、家里的 PC 或他的便携机来访问邮件。下载并删除方式会给收件人带来很多不方便。
 

•IMAP

     因特网邮件访问协议(IMAP)比 POP3 具有更多的特色,因此更加复杂。
IMAP 服务器把每个邮件与一个文件夹联系起来,当邮件第一次到达服务器时,它是放在收件人的收件箱文件夹里。收件人则可以把邮件移到一个新的、用户创建的文件夹中,或阅读邮件、删除邮件等。IMAP 协议为用户提供了创建文件夹以及在文件夹之间移动邮件的命令. 它还为用户提供了在远程文件夹中查询邮件的命令,按指定条件去查询匹配的邮件。
     与 POP3 不同的是,IMAP 服务器维护了 IMAP 会话的用户状态信息,例如,文件夹的名字以及哪个邮件与哪个文件夹相关联。
     IMAP 的另一个重要特性是它具有允许用户代理获取邮件组件的命令。例如,用户代理可以只读取一个邮件首部。

•基于 Web 的电子邮件

    越来越多的用户使用他们的 Web 浏览器收发电子邮件。
    基于 Web 的电子邮件,用户代理就是普通的浏览器,用户和其远程邮箱之间的通信则通过 HTTP 进行。
    当一个收件人想从他的邮箱中取一个邮件时,该电子邮件从邮件服务器发送到他的浏览器,使用的是 HTTP 而不是 POP 或者 IMAP 协议。当发件人要发送一封电子邮件时,使用的也是 HTTP 而不是 SMTP。
注:但是,用户的邮件服务器在与其他的邮件服务器之间发送和接收邮件时,仍然使用 SMTP

猜你喜欢

转载自blog.csdn.net/weixin_43522969/article/details/106131731
今日推荐