SMTP 协议基础:一封邮件是如何从发件人到达收件人的

2026-05-21

电子邮件是互联网最古老也最核心的应用之一,而 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是驱动邮件发送的底层引擎。理解 SMTP 的工作原理,不仅能帮助你排查邮件发送问题,还能更好地理解退信、垃圾邮件过滤等常见现象。

邮件系统的三个核心协议

在深入 SMTP 之前,先了解邮件系统涉及的三个协议,它们各司其职:

协议 全称 作用 类比
SMTP 简单邮件传输协议 负责发送和转发邮件 邮局的运输卡车
POP3 邮局协议第 3 版 从服务器下载邮件到本地 去邮局把信取回家
IMAP 互联网邮件访问协议 在服务器上管理和阅读邮件 在邮局就地阅读信件

简单来说:SMTP 管"寄信",POP3 和 IMAP 管"收信"。本文重点讲解 SMTP 如何将邮件从发件人传递到收件人。

一封邮件的完整旅程

假设 Alice(alice@gmail.com)给 Bob(bob@yahoo.com)发送一封邮件,这封邮件会经历以下六个阶段:

阶段一:撰写与提交

Alice 在 Gmail 网页或客户端中写好邮件,点击"发送"。此时邮件从浏览器(或邮件客户端)通过 SMTP 协议提交到 Gmail 的邮件发送服务器(通常是 smtp.gmail.com,端口 587)。

这一步需要身份验证——Alice 必须先登录 Gmail 账号,服务器确认她有权使用 alice@gmail.com 这个地址发信。

阶段二:DNS 查询

Gmail 的发送服务器收到邮件后,需要知道把邮件送到哪里。它会向 DNS(域名系统)查询收件人域名 yahoo.com 的 MX 记录(Mail Exchange Record,邮件交换记录)。

MX 记录会返回 Yahoo 邮件服务器的地址,例如:

yahoo.com    MX    优先级 1    mta5.am0.yahoodns.net
yahoo.com    MX    优先级 5    mta6.am0.yahoodns.net
yahoo.com    MX    优先级 5    mta7.am0.yahoodns.net

服务器会优先尝试优先级最高(数字最小)的 MX 记录。如果该服务器不可用,再尝试下一个。

阶段三:SMTP 握手

Gmail 的服务器与 Yahoo 的邮件服务器之间建立 TCP 连接(通常使用端口 25),然后开始一段标准化的"对话"。这就是 SMTP 协议的核心——一系列命令和响应:

连接建立
Yahoo: 220 mta5.am0.yahoodns.net ESMTP ready
Gmail: EHLO mail.gmail.com
Yahoo: 250-mta5.am0.yahoodns.net Hello
Yahoo: 250-STARTTLS
Yahoo: 250 OK
升级到加密连接
Gmail: STARTTLS
Yahoo: 220 Ready to start TLS
告知发件人和收件人
Gmail: MAIL FROM:<alice@gmail.com>
Yahoo: 250 OK
Gmail: RCPT TO:<bob@yahoo.com>
Yahoo: 250 OK
传输邮件内容
Gmail: DATA
Yahoo: 354 Start mail input
Gmail: From: Alice <alice@gmail.com>
Gmail: To: Bob <bob@yahoo.com>
Gmail: Subject: Hello Bob!
Gmail:
Gmail: Hi Bob, how are you?
Gmail: .
Yahoo: 250 OK, message queued
断开连接
Gmail: QUIT
Yahoo: 221 Bye

整个对话过程清晰有序:先打招呼(EHLO),再加密(STARTTLS),然后说明信封信息(发件人、收件人),最后传递信件内容(DATA)。

阶段四:接收方处理

Yahoo 的邮件服务器收到邮件后,会进行一系列检查:

  1. 验证收件人:bob@yahoo.com 是否存在?如果不存在,返回退信(硬退回)
  2. 身份验证:检查 SPF、DKIM、DMARC 记录,确认发件人身份
  3. 垃圾邮件过滤:扫描邮件内容,判断是否为垃圾邮件
  4. 病毒扫描:检查附件是否包含恶意软件

通过所有检查后,邮件被投递到 Bob 的邮箱存储中。

阶段五:邮件存储

邮件被存储在 Yahoo 的邮件服务器上,等待 Bob 来读取。邮件会根据过滤规则被放入收件箱、垃圾箱或其他文件夹。

阶段六:收件人读取

Bob 打开 Yahoo 邮箱,通过 IMAPPOP3 协议从服务器获取邮件内容。如果使用网页版,则通过 HTTP/HTTPS 协议直接在浏览器中阅读。

SMTP 的关键命令详解

命令 含义 说明
EHLO 打招呼 向对方服务器表明自己的身份,同时询问支持哪些扩展功能
STARTTLS 升级加密 将明文连接升级为 TLS 加密连接,保护传输中的邮件内容
MAIL FROM 发件人 声明邮件的发件人地址(信封上的寄件人)
RCPT TO 收件人 声明邮件的收件人地址(可以有多个)
DATA 邮件正文 开始传输邮件头部和正文内容,以单独一行的 "." 结束
QUIT 断开 结束会话,关闭连接

SMTP 响应码的含义

SMTP 服务器的每个响应都以三位数字开头,不同的数字代表不同的状态:

响应码 含义 示例
2xx 成功 250 OK — 命令执行成功
3xx 需要更多信息 354 Start mail input — 等待邮件内容
4xx 临时错误(软退回) 421 服务暂时不可用 / 450 邮箱忙
5xx 永久错误(硬退回) 550 用户不存在 / 553 地址格式错误

这些响应码在排查邮件发送问题时非常有用。当你收到退信通知时,其中包含的响应码能帮你快速定位原因。

SMTP 的端口号

SMTP 使用不同端口提供不同功能:

  • 端口 25:服务器之间传输邮件的标准端口。许多 ISP 会封锁此端口以防止垃圾邮件
  • 端口 587:用户提交邮件的推荐端口,支持 STARTTLS 加密和身份验证
  • 端口 465:使用隐式 SSL/TLS 加密的旧端口,部分服务仍在使用

如果你在配置邮件客户端或 SMTP 服务,推荐使用端口 587 + STARTTLS 的组合。

SMTP 的局限性与现代改进

SMTP 诞生于 1982 年(RFC 821),当时的互联网没有安全威胁。因此原始的 SMTP 协议存在一些先天不足:

  • 无加密:原始 SMTP 以明文传输,后来通过 STARTTLS 扩展解决
  • 无身份验证:任何人都可以声称自己是任何发件人,后来通过 SPF、DKIM、DMARC 弥补
  • 无送达确认:发送方无法确切知道邮件是否到达收件人的收件箱

尽管有这些局限,SMTP 至今仍是全球邮件系统的核心协议。通过不断叠加安全扩展,它在保持向后兼容的同时,持续适应现代互联网的安全需求。

总结

一封邮件的旅程远比你想象的复杂:从用户点击发送,到 DNS 查询、SMTP 握手、身份验证、垃圾邮件过滤,最终到达收件人的邮箱——每一步都有严格的协议和规则在支撑。理解这些底层机制,能帮助你更好地管理邮箱、排查发信问题、优化邮件到达率。