SMTP 响应码是什么
SMTP 的每个命令都有一条三位数应答:第一位决定大类,2xx 表示成功、3xx 表示中间态(还需继续)、4xx 表示临时错误应稍后重试、5xx 表示永久错误应直接退信。第二位细分语义(语法、信息、连接、邮件系统),第三位进一步区分。排障时先看第一位判断「还能不能重试」,再看文本里的增强状态码(如 5.7.1)定位策略原因。
基本信息
| 格式 | 三位数字 + 空格 + 文本说明 |
|---|---|
| 大类 | 2 成功、3 中间态、4 临时错误、5 永久错误 |
| 增强码 | 形如 5.7.1,RFC 3463 定义,更细的语义分类 |
| 常见端口 | 25 中继、587 提交、465 隐式 TLS |
| 规范 | RFC 5321 §4.2、RFC 3463 |
| 观察方式 | swaks、openssl s_client -starttls smtp、邮件日志 |
典型使用场景
- 用户报「发不出去」时,先从日志里找应答码,判断是认证问题还是被拒收
- 区分「稍后自动重试」与「需要人工介入」:4xx 交给队列,5xx 要改配置或联系对方
- 排查认证失败:535 通常是凭据或应用专用密码问题,530 是没先做认证
- 识别反垃圾拦截:554 与 5.7.x 常见于对方策略拒收
- 验证自己的发信服务是否要求 STARTTLS 与 AUTH
应答码速查
| 码 | 含义 | 场景与动作 |
|---|---|---|
| 211 | 系统状态 | HELP 类别应答 |
| 214 | 帮助消息 | HELP 命令的回复 |
| 220 | 服务就绪 | 连接建立后的首条应答 |
| 221 | 服务关闭 | QUIT 的正常应答 |
| 235 | 认证成功 | AUTH 通过,可继续 MAIL FROM |
| 250 | 请求动作完成 | 最常见成功码,MAIL/RCPT/DATA 后确认 |
| 251 | 用户非本地,将转发 | RCPT 应答,收件人需转发 |
| 252 | 无法验证用户但仍接受 | RCPT 应答,常见于内网中继 |
| 354 | 开始输入正文 | DATA 命令的应答,以单独一行句点结束 |
| 421 | 服务不可用,即将关闭连接 | 临时错误,稍后重试 |
| 450 | 邮箱不可用(临时) | 临时错误,稍后重试 |
| 451 | 处理时出错(临时) | 临时错误,多为本地资源问题 |
| 452 | 存储不足(临时) | 临时错误,队列或磁盘压力 |
| 455 | 参数错误(临时) | 临时错误,稍后重试 |
| 500 | 语法错误 | 永久失败,命令本身不合法 |
| 501 | 参数语法错误 | 永久失败,地址格式或参数有误 |
| 502 | 命令未实现 | 永久失败,服务端不支持该命令 |
| 503 | 命令顺序错误 | 需先 EHLO/AUTH 再发后续命令 |
| 504 | 参数未实现 | 永久失败,换用支持的参数形式 |
| 530 | 需要认证 | 先完成 AUTH 再发信 |
| 534 | 认证机制太弱 | 换更强的机制或改用加密连接 |
| 535 | 认证失败 | 凭据错误,检查账号与应用密码 |
| 550 | 邮箱不可用(永久) | 拒收:地址不存在或策略拒收 |
| 551 | 用户非本地 | 需按提示转发到其他服务器 |
| 552 | 存储溢出(永久) | 永久失败,超出配额或大小限制 |
| 553 | 邮箱名不允许 | 地址格式非法,永久失败 |
| 554 | 事务失败或被策略拒 | 反垃圾拒收的常见码,看附加说明 |
记忆方法:4yz 是「现在不行,晚点再来」,5yz 是「别再来」。邮件队列会自动按退避策略重试 4xx,而 5xx 会生成退信给发件人,两者的处理路径完全不同。
接到 4xx 就立刻判定发送失败并放弃重试,会把对方限流或灰名单造成的短暂拒绝变成「邮件丢了」;反过来,遇到 5xx 还反复重投只会损害本域信誉。