SMTP 发信报错'550 5.7.1 Unable to relay for xxx@xxx.com'或'Relaying denied',怎么解决?

47 SMTP 发信报错"550 5.7.1 Unable to relay for xxx@xxx.com"或"Relaying denied",怎么解决?
原因

Relay denied 意味着你的 SMTP 服务器拒绝代你发信给外部域。SMTP relay(中继)= 用一台服务器发信给非本域收件人。SMTP 协议设计为:如果你不是这台服务器的用户,它没义务帮你发信——否则就成了"开放中继"(会被全世界的垃圾邮件发送者利用)。触发三种情况:(1) 客户端没做 SMTP 认证(AUTH LOGIN)就直接发信;(2) 你的 IP 不在服务器中继白名单内;(3) 发件人域名与 SMTP 服务器的管辖域不匹配。注意:"Unable to relay" 和"Message rejected as spam"不同——前者是配置问题,肯定能修好。

操作

1. 邮件客户端(Outlook/Thunderbird):账户设置 → 更多设置 →"发送服务器"选项卡 → 勾选"我的发送服务器 (SMTP) 要求验证"→ 选择"使用与接收邮件服务器相同的设置"。
2. 代码发信(PHPMailer/nodemailer/Python):使用 SMTP AUTH 方式而不直接 pickup。Python 例:smtp.login(user, password)
3. 自建 Postfix:编辑 /etc/postfix/main.cfmynetworks = 127.0.0.0/8, [::1]/128, 192.168.1.0/24(加入客户端 IP 段);smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
4. 用第三方 SMTP(如网易/Gmail):SMTP 用户名必须有权限,且 From: 地址通常必须与 SMTP 账号一致。
5. 手工测试:telnet smtp.xxx.com 587EHLO testAUTH LOGIN 确认认证步骤通过。

参考:RFC 4954 (SMTP AUTH) · Postfix relay 配置文档