共 117 个代码,显示 117 个
基本响应码
系统状态或系统帮助应答。实际中很少使用。
对 HELP 命令返回的帮助信息,说明服务器或某个命令的用法。
建立连接时服务器的初始问候,表示服务已就绪。也用于响应 STARTTLS,表示可以开始 TLS 协商。
服务器关闭连接,通常是对 QUIT 命令的响应。
AUTH 身份验证成功。通常附带增强码 2.7.0。
请求的操作已完成。这是对 EHLO、MAIL FROM、RCPT TO 的常规响应,也会在 DATA 结束、服务器接受邮件时返回。
收件人不是本地用户,但服务器接受该邮件,并会转发到指定地址。
服务器不确认用户是否存在(为防止账户枚举而禁用了 VRFY),但会接受邮件并尝试投递。
对 ETRN 的响应:服务器已开始投递队列中发往所请求域名或节点的邮件。
AUTH 过程中服务器发出的 Base64 编码质询。客户端必须用认证机制的下一项数据作答(例如 AUTH LOGIN 中的用户名或密码)。
对 DATA 的响应:服务器等待接收邮件内容,内容以一个只包含句点的行结束。
服务不可用,服务器关闭连接:可能是正在关机、负载过高、连接数过多或触发了临时发送限制。发件方应稍后重试。
用户必须先修改密码或改用其他认证机制,才能完成身份验证。附带增强码 4.7.12。
邮箱暂时不可用:忙、被锁定,或因策略被暂时拒绝。灰名单(greylisting)通常返回此代码或 451。
由于服务器本地错误(如 DNS 查询失败或过滤器无响应)操作已中止。发件方应稍后重试。
服务器暂时没有足够空间接收该邮件。也可能表示超出了单封邮件的收件人数量上限,此时客户端应在另一个事务中发送其余收件人。
暂时性的认证失败(例如凭据服务器无响应),或请求 STARTTLS 时 TLS 暂时不可用。
服务器暂时无法处理 MAIL FROM 或 RCPT TO 中发送的参数,但稍后可能会接受。
对 ETRN 的响应:服务器暂时无法处理所请求节点的邮件队列。
对 ETRN 的响应:所请求的节点或域名无权请求投递其队列。
服务器无法识别该命令,或该行过长。AUTH 交互中某一行超过允许的最大长度时也会返回此代码。
命令有效,但参数无效:例如 MAIL FROM 中的地址格式错误,或 EHLO 中的名称无效。
服务器能识别该命令,但未实现或已禁用,许多服务器上的 VRFY 和 EXPN 就是如此。
命令顺序错误,例如在 MAIL FROM 之前发送 RCPT TO,或在没有有效收件人时发送 DATA。有些服务器在未认证就尝试发信时也会返回此代码。
服务器不支持所指定的参数,例如请求了不支持的 AUTH 机制。
该主机不接收任何邮件。它代替 220 作为问候语发送,客户端不应重试。
服务器要求先进行身份验证,或先用 STARTTLS 启动 TLS,才能接受该命令。未提供凭据就使用 587 提交端口时很常见。
按照服务器的策略,所选认证机制强度太弱。要求使用应用专用密码或 OAuth 的邮件服务商有时会返回此代码。
用户名或密码错误,或凭据被拒绝。附带增强码 5.7.8。
所选认证机制只允许在加密连接上使用:必须先执行 STARTTLS。
邮箱不存在或不可用,或邮件因策略被拒绝(垃圾邮件、黑名单、SPF、DKIM 或 DMARC)。具体原因要看随附的增强码。
收件人不是本地用户,服务器不会转发该邮件;可能会提示应发送到哪个地址。
超出分配的存储空间:收件人邮箱已满,或邮件超过了 SIZE 扩展声明的最大大小。
邮件地址无效或不被允许,例如语法错误,或发件人无权使用该地址。
事务失败。若作为初始问候出现,表示不为该客户端提供 SMTP 服务;若出现在 DATA 之后,表示邮件被拒收,通常是因为内容或发件人信誉。
服务器无法识别或未实现 MAIL FROM 或 RCPT TO 中发送的扩展参数。
收件人域名发布了 null MX(指向“.”的 MX 记录),声明不接收邮件,因此重试没有意义。
增强状态码(RFC 3463)
无更多细节的状态:仅知道结果类别(成功、暂时失败或永久失败)时使用。
邮件中的某个地址有问题,且不属于更具体的代码。
目标服务器上不存在该收件人邮箱。这是地址拼写错误或账户已注销导致的典型退信。
目标域名或系统不存在或无法接收邮件,例如域名无法解析。
收件人地址语法无效。
收件人地址在目标系统上匹配到多个邮箱。
收件人地址有效。以 2.1.5 的形式出现在 RCPT TO 的肯定响应中。
该邮箱曾经存在,但已迁移,且没有已知的转发地址。
发件人地址语法无效。
发件人域名不存在或不接收回复,例如既没有 MX 记录也没有 A 记录。
邮件已交给不支持状态通知的系统,因此无法确认最终是否投递成功。
收件人域名发布了 null MX,声明不接收邮件。
邮箱存在,但与其相关的某个问题导致无法投递,且没有更具体的代码。
邮箱存在但已被禁用,不接收邮件,例如账户已被停用。
收件人邮箱已超出存储配额。
邮件超过了收件人允许接收的最大大小。
收件人是邮件列表,但无法展开为其成员。
目标系统出现问题,且不属于更具体的代码。
目标邮件系统的存储空间已满。
目标主机因即将关机、负载过高或维护而暂不接收邮件。
目标系统不支持邮件所需的某项功能。
邮件超过了服务器对任何收件人都接受的最大大小。
目标系统配置错误,无法接收该邮件。
邮件已被接受,但使用的优先级与请求的不同(MT-PRIORITY 扩展)。
出现网络或路由问题,且不属于更具体的代码。
尝试连接时目标服务器没有响应。
连接已建立,但在投递完成前中断或变得不稳定。
投递所需的目录服务失败,通常是 DNS 解析失败。
找不到通往目标的路由,例如域名没有可用的 MX 或 A 记录。
邮件系统拥塞,暂时无法处理该邮件。
检测到路由环路:邮件在相同的服务器之间经过了太多次。
已超过最长重试时间,邮件未能投递并被丢弃。
投递协议出现问题,且不属于更具体的代码。
命令无效、当前不允许使用,或无法识别。
命令存在语法错误,服务器无法解析。
邮件的收件人数量超过了服务器在单个事务中允许的上限。
命令有效,但其参数无效或不受支持。
客户端与服务器的协议版本不兼容。
AUTH 交互中的某一行超过了服务器允许的最大长度。
邮件内容有问题,且不属于更具体的代码。
目标不支持邮件或其某个附件的内容类型。
投递邮件需要转换其内容,但发件人禁止转换。
投递邮件需要转换其内容,但服务器无法进行这种转换。
邮件已投递,但内容转换过程中丢失了部分信息。
邮件内容转换失败。
无法获取通过 URL 引用的邮件内容(BURL 扩展)。
发件人或收件人不支持包含非 ASCII 字符的地址(国际化电子邮件,SMTPUTF8)。
服务器需要用 UTF-8 文本响应,但客户端没有声明支持 SMTPUTF8。
邮件含有 UTF-8 邮件头,无法传送给一个或多个不支持它的收件人,因此被拒收。
无更多细节的安全状态。出现在认证成功(2.7.0)、AUTH 暂时失败(4.7.0)以及因策略被拒收的情况中。
发件人无权向该收件人发送邮件:因黑名单、信誉、反垃圾邮件或未经允许的中继尝试而被拦截。以 4.7.1 形式出现时通常表示灰名单。
发件人无权向该邮件列表发送邮件。
需要将邮件从一种安全协议转换为另一种,但无法完成。
邮件需要的安全功能目标不支持。
传输过程中的加密操作失败,例如签名验证或解密失败。
目标不支持邮件所使用的加密算法。
完整性校验失败:邮件在传输中被修改,或校验和不匹配。
身份验证凭据无效:用户名或密码错误。
所选认证机制的强度低于服务器策略的要求。
使用所请求的认证机制需要外部加密层(如 TLS)。主要针对以明文发送密码的机制。
所请求的认证机制只允许在加密连接上使用。
用户必须修改密码或改用其他认证机制。
尝试进行身份验证的用户账户已被禁用。
服务器只接收来自已建立信任关系的系统的邮件。
邮件优先级太低,目前无法接收(MT-PRIORITY 扩展)。
对于所指定的优先级,邮件太大(MT-PRIORITY 扩展)。
自发件人指定的日期以来,该邮箱已更换所有者,因此邮件不予投递(RRVS 扩展)。
自发件人指定的日期以来,收件人域名已更换所有者(RRVS 扩展)。
服务器无法按发件人的要求验证邮箱是否已更换所有者(RRVS 扩展)。
邮件没有任何有效的 DKIM 签名,而收件方策略要求必须有。
邮件有有效的 DKIM 签名,但没有一个符合收件方策略(例如签名域名或算法不符)。
邮件没有来自 From 邮件头中所示同一域名的有效 DKIM 签名。
发送 IP 未在发件人域名的 SPF 记录中获得授权。
SPF 评估出错,例如记录格式错误或 DNS 查询次数过多。
发送 IP 没有反向 DNS(PTR),或返回的主机名无法正向解析回该 IP。
邮件的多项认证检查同时失败,例如 SPF 和 DKIM。
发件人域名发布了 null MX,无法接收回复和退信,因此邮件被拒收。
该邮件疑似属于大量类似滥发邮件的一部分。
ARC 链验证失败。ARC 用于在邮件经过转发服务或邮件列表时保留身份验证结果。
邮件要求 REQUIRETLS,但路径上的下一台服务器不支持该扩展,因此无法在保证加密的前提下投递。
粘贴服务器的完整响应,例如 550 5.7.1 Message rejected,即可同时查看基本码和增强码。搜索基本码时,还会列出通常与之同时出现的增强码。
工作原理
在 SMTP 会话中,客户端的每条命令(EHLO、MAIL FROM、RCPT TO、DATA 等)都会收到服务器以三位数字代码开头的响应。第一位表示结果:2 表示成功,3 表示服务器在等待更多数据,4 表示暂时性错误,5 表示永久性错误。第二位表示类别:x0z 为语法,x1z 为信息,x2z 为连接,x5z 为邮件系统。代码后面的文本格式不限,各服务器自行编写;程序只看数字。
三位数字很难说明具体原因,因此 RFC 3463 定义了增强状态码,格式为“类别.主题.详情”:5.1.1 表示与地址(1)相关的永久失败(5),原因是邮箱不存在(1)。类别重复第一位数字的含义(2、4 或 5),主题对原因归类,详情则进一步明确。使用增强码的服务器会在 EHLO 响应中通过 ENHANCEDSTATUSCODES 扩展声明,同样的代码也会出现在退信的 Status 字段中。
此表汇总了 RFC 5321 的基本码、常用扩展(AUTH、STARTTLS、ETRN 和 null MX)新增的代码,以及 IANA 注册表中的全部增强码,并标出每个增强码通常搭配的基本码。大型邮件服务商会加上自己的说明文字和帮助链接,但使用的始终是这些编号。
示例
550 5.1.1 <nadie@example.com>: Recipient address rejected: User unknown in local recipient table5xx Permanent · X.1.1 Bad destination mailbox address账户不存在时 Postfix 返回的典型退信。重试没有用,必须更正地址。如果以前能正常发给这个收件人,最可能是该账户已被注销。450 4.2.0 <ana@example.com>: Recipient address rejected: Greylisted4xx Transient · X.2.0 Other or undefined mailbox status灰名单:服务器暂时拒绝陌生发件人,等待其重试。正规的邮件服务器会在几分钟后自动重试,邮件随即被接收;而许多垃圾邮件程序从不重试。AUTH LOGIN334 VXNlcm5hbWU6334 携带 Base64 编码的质询:VXNlcm5hbWU6 是“Username:”,下一个 UGFzc3dvcmQ6 是“Password:”。如果凭据错误,服务器返回 535 5.7.8;如果要求先加密,则返回 538 或 530。使用场景
- 根据服务器返回的错误信息,弄清邮件被退回的原因。
- 区分错误是暂时性的(队列会自动重试),还是永久性的(需要人工处理)。
- 在应用程序、打印机或服务器上配置邮件发送时,排查身份验证失败。
- 解读邮件服务器日志中因 SPF、DKIM、DMARC、反向 DNS 或黑名单导致的拒收。
- 在群发邮件平台中对退信分类,清除不存在的地址。
- 阅读用 telnet、openssl s_client 或 swaks 抓取的 SMTP 会话。
常见问题
4xx 错误和 5xx 错误有什么区别?
4xx 是暂时性错误:发送方服务器会把邮件留在队列中定期重试,一般持续四到五天,仍失败才放弃并生成退信。5xx 是永久性错误:会立即退信,不做任何改动就重发同一封邮件仍会失败。
为什么响应中有两个代码,比如 550 5.1.1?
第一个是 RFC 5321 规定必须有的三位基本码;第二个是 RFC 3463 的增强状态码,用来说明具体原因:同样是 550,可能是邮箱不存在(5.1.1)、被策略拦截(5.7.1)或 SPF 验证失败(5.7.23)。排查问题时,应主要看增强码。
550-5.7.1 中的连字符是什么意思?
表示这是多行响应。每一行都带有相同的代码,但中间的行用连字符把代码和文本隔开,最后一行用空格,客户端据此判断响应何时结束。EHLO 返回的扩展列表也是同样的格式。
地址明明存在,为什么会被 550 5.7.1 拒收?
因为 5.7.1 针对的不是收件人,而是发件人:服务器不允许你向其投递这封邮件。常见原因包括:发送 IP 在黑名单中,域名的 SPF、DKIM 或 DMARC 验证失败,IP 没有反向 DNS,或者未经身份验证就试图把服务器当作中继。代码后面的文本通常会给出线索。
为什么从应用程序发送邮件时会出现 530 或 535?
530 表示服务器要求先进行身份验证或启动 TLS,才能接受邮件;535 表示用户名或密码错误。请确认应用程序使用 587 端口配合 STARTTLS,或 465 端口配合隐式 TLS,并已启用身份验证;对于 Gmail 或 Microsoft 365 等服务商,还要使用应用专用密码或 OAuth,而不是平常的登录密码。