SMTP 与 POP3

邮件系统里有两个方向:把邮件推出去用 SMTP,把邮件拉回来用 POP3(或 IMAP)。两个协议都基于 TCP,端口分别是 25 和 110(SMTP 和 POP3 在传输层所使用的服务 2015、2018 年考过)。

本页 2 道错题:用户代理”只能发不能收”是哪个地址配错了,以及 POP3 传密码时到底加不加密。

机制

SMTP

简单邮件传送协议(Simple Mail Transfer Protocol,SMTP)是一种提供可靠且有效的电子邮件传输的协议,它控制两个相互通信的 SMTP 进程交换信息。因为 SMTP 采用客户/服务器模式工作,所以负责发送邮件的 SMTP 进程就是 SMTP 客户,而负责接收邮件的 SMTP 进程就是 SMTP 服务器。SMTP 用的是 TCP 连接,端口号为 25(SMTP 的用途及特点 2013、2014 年考过)。

SMTP 通信有以下三个阶段:

阶段过程
连接建立发件人的邮件发送到发送方邮件服务器的邮件缓存中后,SMTP 客户就每隔一定时间对邮件缓存扫描一次。如发现有邮件,就与接收方邮件服务器的 SMTP 服务器建立 TCP 连接(熟知端口 25)。连接建立后,接收方 SMTP 服务器发出 220 Service ready(服务就绪)。然后 SMTP 客户向 SMTP 服务器发送 HELO 命令,附上发送方的主机名
邮件传送邮件的传送从 MAIL 命令开始,如 MAIL FROM: <fh@hit.edu.cn>。若 SMTP 服务器已准备好接收邮件,则回答 250 OK。下面跟着一个或多个 RCPT 命令,格式为 RCPT TO: <收件人地址>;每发送一个 RCPT 命令,都应有相应的信息从 SMTP 服务器返回,如 250 OK 或 550 No such user here(无此用户)。获得 OK 的回答后,客户端就使用 DATA 命令,表示要开始传送邮件的内容,SMTP 服务器返回 354 Start mail input; end with <CRLF>.<CRLF>,此时 SMTP 客户就可开始传送邮件内容
连接释放邮件发送完毕后,SMTP 客户应发送 QUIT 命令,SMTP 服务器返回 221(服务关闭),表示 SMTP 同意释放 TCP 连接

RCPT 命令的作用是:先弄清接收方系统是否已做好接收邮件的准备,然后才发送邮件,以便不至于发送了很长的邮件后才知道地址错误,进而避免浪费通信资源。

SMTP 不使用中间的邮件服务器。 TCP 连接总是在发送方和接收方这两个邮件服务器之间直接建立,而不管它们相隔多远,不管在传送过程中要经过多少个路由器。当接收方邮件服务器因故障暂时不能建立连接时,发送方的邮件服务器只能等待一段时间后再次尝试连接。

POP3 与 IMAP

邮局协议(Post Office Protocol,POP)是一个非常简单但功能有限的邮件读取协议,现在使用的版本是 POP3。POP 也采用客户/服务器模式,在传输层使用 TCP,端口号为 110。接收方的用户代理必须运行 POP 客户程序,而接收方的邮件服务器中则运行 POP 服务器程序。

POP 有两种工作方式:

方式含义
下载并保留用户从邮件服务器上读取邮件后,邮件依然会保存在邮件服务器上,用户可再次从服务器上读取该邮件
下载并删除邮件一旦被读取,就被从邮件服务器上删除

另一个邮件读取协议是因特网报文存取协议(IMAP),它比 POP 复杂得多。IMAP 为用户提供了创建文件夹、在不同文件夹之间移动邮件及在远程文件夹中查询邮件等联机命令,为此 IMAP 服务器维护了会话用户的状态信息。IMAP 的另一特性是允许用户代理只获取报文的某些部分,例如可以只读取一个报文的首部,或多部分 MIME 报文的一部分,这非常适用于低带宽的情况。

此外,随着万维网的流行,目前出现了很多基于万维网的电子邮件,如 Hotmail、Gmail 等。这种电子邮件的特点是,用户浏览器与邮件服务器之间的邮件发送或接收使用的是 HTTP,而仅在不同邮件服务器之间传送邮件时才使用 SMTP。

三个协议的对照

SMTPPOP3IMAP
用途发送邮件(用户代理 → 服务器、服务器 → 服务器)读取邮件读取邮件
通信方式推(Push)拉(Pull)拉
传输层TCP 25TCP 110TCP
状态——简单、功能有限维护会话用户的状态信息,可只取报文的一部分

边界

错题复盘:只能发不能收,是 POP3 地址配错了

王道 6.4.4 第 5 题:用户代理只能发送而不能接收电子邮件时,可能是( )地址错误(A. POP3 B. SMTP C. HTTP D. Mail)。答案 A。

用户代理使用 POP3 协议接收邮件。 通常用户在配置电子邮件用户代理时需要设置邮件服务器的 POP3 地址(如 pop3.gmail.com),若这个地址设置错误,则会导致用户无法接收邮件。用户代理中的 SMTP 地址错误时会导致无法发送邮件;收件人 E-mail 地址错误时,可能会发错人,也可能会导致投递失败(不存在的地址)。

判断这类题只要认准方向:SMTP 管发、POP3 管收。题干说”能发不能收”,出问题的一定是收的那一侧。

错题复盘:POP3 在传输层用明文传密码,不加密

王道 6.4.4 第 8 题:下列关于 POP3 协议的说法,( )是错误的(A. 由客户端而非服务器选择接收后是否将邮件保存在服务器上 B. 登录到服务器后,发送的密码是加密的 C. 协议是基于 ASCII 码的,不能发送二进制数据 D. 一个账号在服务器上只能有一个邮件接收目录)。答案 B。

POP3 协议在传输层是使用明文来传输密码的,并不对密码进行加密,所以 B 错误。POP3 协议基于 ASCII 码,若要传输非 ASCII 码的数据,则要使用 MIME 将数据转换成 ASCII 码形式(C 对)。A 对应的是”下载并保留”与”下载并删除”两种方式,选择权在客户端。

与之呼应的是 POP3 的定位:非常简单但功能有限。想要文件夹、服务器端状态、部分获取,要用 IMAP。

SMTP 只在两个邮件服务器之间直接建立 TCP 连接。 不经过中间邮件服务器,这与 IP 分组的逐跳转发完全不同。

SMTP 不能用于从服务器读取邮件。 它是”推”协议;读取要用 POP3、IMAP 或 HTTP(王道 6.4.4 第 6 题)。

POP3 建立在 TCP 之上,使用有连接可靠的服务。 两个邮件协议都不是 UDP(第 11 题)。

浏览器登录网页邮箱时用的是 HTTP,不是 POP3。 只有服务器之间传邮件才是 SMTP(第 4 题)。

口径差异:今天的邮件协议端口与加密

教材口径:SMTP 用 TCP 25,POP3 用 TCP 110,POP3 明文传密码。

工程口径:明文端口今天基本被禁用。提交邮件改用 587(STARTTLS)或 465(SMTPS),读取改用 POP3S 995、IMAPS 993,全部在 TLS 之上,账号密码不再明文传输;认证也从明文口令扩展为 SMTP AUTH、OAuth 等机制。客户端侧 IMAP 已基本取代 POP3,因为它支持多设备同步。

考试按教材口径作答:SMTP 25、POP3 110、POP3 明文。

对照速查

说法对错
SMTP 使用 TCP,端口 25✅
POP3 使用 TCP,端口 110✅
SMTP 可以用于用户代理从服务器读取邮件❌(推协议,只负责发送)
SMTP 传送邮件要经过中间邮件服务器❌
RCPT 命令用于告知收件人地址并提前确认对方是否存在✅
DATA 命令后服务器返回 354,邮件内容以 <CRLF>.<CRLF> 结束✅
POP3 登录时密码是加密传输的❌
POP3 只能”下载并删除”❌(还有”下载并保留”)
IMAP 服务器维护用户的会话状态✅
IMAP 允许只下载邮件的一部分✅
浏览器登录 Gmail 收发邮件用的是 POP3❌(HTTP)

考点

  • SMTP:TCP 25、推、三阶段(220/HELO → MAIL/RCPT/DATA → QUIT/221)(2013、2014、2015、2018)
  • POP3:TCP 110、拉、下载并保留/下载并删除、明文口令
  • IMAP:功能强、维护状态、可部分下载
  • 基于万维网的邮件:浏览器 ↔ 服务器用 HTTP,服务器 ↔ 服务器用 SMTP

链接