邮件工作流包含发送步骤和邮箱步骤。SMTP 负责前者;IMAP 负责后者。
SMTP 做什么?
SMTP 发送和中继邮件。你的应用或邮件客户端与 SMTP 服务器建立连接,提交发件人、收件人和邮件内容,并在每条命令后收到回复。中继服务器随后可以作为 SMTP 客户端将邮件传递给下一个服务器。
该协议不决定邮箱如何显示,也不决定用户已读了哪些邮件。它的职责是传输以及在服务器之间交接责任。
IMAP 做什么?
IMAP 从邮箱中检索邮件并同步邮箱状态。手机和笔记本电脑能看到相同的文件夹、标记和已读状态,因为两者都基于服务器上的副本工作。
IMAP 不提交新邮件进行投递。客户端可以使用 SMTP 发送回复,然后使用 IMAP 在邮箱中阅读回复线程。
SMTP 和 IMAP 如何比较?
| 问题 | SMTP | IMAP |
|---|---|---|
| 主要职责 | 发送和中继邮件 | 检索和同步邮箱数据 |
| 方向 | 向邮件服务器或中继服务器的出站方向 | 邮箱服务器与客户端之间 |
| 服务器状态 | 服务器可以在下一次交接之前将邮件排入队列;SMTP 不定义用户的邮箱 | 服务器保存邮箱副本、文件夹和邮件状态 |
| 典型客户端 | 发送应用或邮件客户端 | 读取收件箱的邮件客户端 |
| 常用端口 | 587 用于提交,465 用于隐式 TLS,25 用于服务器间中继 | 143 用于明文或 STARTTLS,993 用于隐式 TLS |
| 应用场景 | 发送回执、告警和其他消息 | 读取或处理现有邮箱 |
服务器状态的差异决定了协议的选择。SMTP 可以在投递期间将邮件排入队列,但它不是邮箱存储。IMAP 围绕服务器端邮箱构建,供客户端反复访问和同步。
如何通过 SMTP 会话诊断故障?
捕获命令及其回复。SMTP 是一个锁步式会话:客户端依次发送 EHLO、MAIL FROM、RCPT TO 和 DATA,服务器逐步应答。出错的命令可以将问题缩小到连接建立、发件人验证、收件人验证或邮件数据。
例如,以下简短交换到达了邮件正文阶段:
S: 220 mail.example ESMTP ready
C: EHLO app.example
S: 250-mail.example
C: MAIL FROM:<sender@example>
S: 250 2.1.0 OK
C: RCPT TO:<recipient@example>
S: 550 5.1.1 user unknown
550 出现在 RCPT TO 之后,因此服务器拒绝了收件人地址。这并不能说明网络连接或发件人身份出了问题。同一步骤的 4xx 回复则应采用重试策略,而不是立即视为永久失败。
RFC 5321 定义了回复格式,并将数字码作为机器可读部分:
An SMTP reply consists of a three digit number (transmitted as three numeric characters) followed by some text unless specified otherwise in this document. The number is for use by automata to determine what state to enter next; the text is for the human user.
用第一位数字作为诊断的第一级分类:
| 码类别 | 含义 | 下一步 |
|---|---|---|
2xx | 命令已完成 | 继续事务 |
3xx | 服务器已接受命令,需要更多输入 | 发送下一部分,例如 DATA 之后的邮件正文 |
4xx | 临时故障 | 保留对邮件的责任,待服务器状况可能恢复后重试 |
5xx | 该请求的永久性故障 | 修正地址、凭据或邮件后再重试 |
将命令和回复码结合起来分析。535 出现在身份验证之后,说明问题在于凭据或身份验证策略。552 出现在 DATA 之后,说明问题在于大小限制。421 出现在连接处理阶段,说明问题在于临时的服务器或连接限制。
我的应用需要哪个协议?
当应用发送邮件时使用 SMTP。当应用读取和同步现有邮箱时使用 IMAP。需要处理入站邮件的应用也可以使用入站邮件 API,它无需轮询邮箱即可投递已解析的邮件。
对于出站邮件,在 SMTP 中继和 HTTP 邮件 API 之间选择。SMTP 适合已经使用该协议的库和系统。HTTP API 适合不便打开和管理 SMTP 连接的环境。
Bird 如何帮助 SMTP 发送?
要通过 Bird 发送,请将中继主机设置为你密钥所在区域的地址,选择端口 465、587 或 2525,并使用用户名 bird 加上你的 API 密钥进行身份验证。SMTP 中继指南提供了连接限制和交接失败时的回复码处理方式。
我可以使用 IMAP 发送邮件吗?
不可以。IMAP 检索和同步邮箱数据。发送邮件需要 SMTP 或 HTTP 邮件 API。
IMAP 和 POP3 有什么区别?
两者都检索邮件,但 IMAP 将邮箱保留在服务器上并在多个客户端之间同步状态。POP3 传统上将邮件下载到单个客户端,因此无法提供相同的共享邮箱状态。
我应该使用哪个 SMTP 端口?
使用 587 通过 STARTTLS 进行经身份验证的提交,或在客户端需要时使用 465 进行隐式加密连接。端口 25 用于服务器间中继,通常会被阻止客户端直接使用。我应该使用哪个 SMTP 端口?对各端口及其角色进行了比较。
简而言之
SMTP 发送和中继邮件。
它将邮件从客户端或应用发送到下一个邮件服务器,然后经过中继跳转到达收件人。
IMAP 检索和同步邮箱。
它让客户端读取邮件,并保持文件夹、标记和已读状态与服务器同步。
回复码告诉你下一步该做什么。
2xx 码表示命令完成,4xx 码表示临时错误,5xx 码表示需要在重试前进行修正。
Bird 的 SMTP 中继指南涵盖发送设置。
可在其中查阅主机、端口、身份验证流程和 SMTP 特定的故障排查细节。
