看到 550 5.7.1,很多退信处理逻辑的第一反应是:5 开头,永久失败,把收件人丢进死地址库,永久压制。
但这条回复的正文写的是“因内容限制被拒”。问题不在地址,而在对方的内容过滤器——可能是你用了短链接。同一套模板发给同一批人,很可能还会撞上同一个过滤器。那句“5xx 是硬退信、4xx 是软退信”的老规矩,只是提示,不是判决。
退信从哪来?大多数退信始于一次负面的 SMTP 回复。接收服务器在会话中拒绝,你的中继就把它转成一条退信。如果对方先接收、之后投递失败,RFC 5321 要求它自己发一条通知,从空发件人 <> 发到你信封上的 MAIL FROM 地址。剩下的来自你自己的中继,连回复都没有:域名不存在、连接打不开、队列过期。
要读懂一条退信,先看服务器有没有宣告 ENHANCEDSTATUSCODES。宣告了,回复里就带第二个更精确的代码,退信分诊从那里开始。
拿 550 5.1.1 User unknown 拆开看,它有三部分:
- 回复码 550,定义在 RFC 5321。首位是 4(稍后重试)或 5(不要原样重发)。
- 增强状态码 5.1.1,定义在 RFC 3463,格式为类别.主题.细节。中间那位说明问题性质:1 寻址、2 邮箱、3 邮件系统、4 网络与路由、5 协议、6 内容、7 安全或策略。
- 文本部分,自由格式,往往最有用。
类别说“多久”,主题说“哪类问题”。5.1.1 是“永久,寻址问题”,意思是地址死了,压制它。其他寻址类代码要看细节位,因为 5.1.7 和 5.1.8 说的是你的发件地址,不是对方的。“永久,策略问题”通常指向你这边:内容、认证或发信声誉。压制收件人,这三样一个都修不好。
处理策略可以归成三类:
- 永久压制:硬退信(5.1.1 用户不存在、5.1.2 域名不存在、5.2.1 邮箱已停用),以及所有投诉。
- 退避重试:软退信(4.2.2 超配额、灰名单、4.3.0 服务器错误),在中继队列生命周期内重试。RFC 5321 说放弃时间一般至少 4 到 5 天,重试间隔一般至少 30 分钟;发送方知道失败原因时可以用更聪明的节奏。一封过期未投的消息,不能证明地址死了。
- 保留收件人,去查原因:5.7.x 的内容与认证拦截、黑名单、限流、中继错误。多数能在自己这边修好(模板、DNS、发信速率、申请移出),有些要找对方的邮件管理员,但没有一条能靠原样重发解决。
几个最容易踩的回合:
550-5.7.26,因域名 DMARC 策略拒收未认证邮件。这是 5xx,却是你自己这边的认证 bug。RFC 7372 把 5.7.26 命名为“多项认证检查失败”,Gmail 用它标记 DMARC 失败。只要对方执行你的 DMARC 策略,SPF 或 DKIM 对齐没修好之前,这类邮件会一直被拒。
421 4.7.0,你的 IP 发信太多。421 还会直接关闭连接。正确动作是降速,用同样的速率重试只会更糟。
450 4.7.1,灰名单,300 秒后再试。把它当失败处理,你就永远触达不到一整类小型自建域名——重试本身就是那道测试。
还有一类根本不是退信:Yahoo 的反馈环报告,Feedback-Type 写着 abuse。邮件已经投递,读者按了“举报垃圾邮件”。投诉要按最严的线处理,立刻永久压制。Google 的发件人指南要求所有发件人把 Postmaster Tools 里的垃圾邮件率控制在 0.3% 以下,并建议保持在 0.1% 以下。
首位告诉你多久,中间位告诉你哪类问题。先看清回复从哪来,再逐条分诊——数一数,有多少 5xx 是你差点误压制的。
热门跟贴