Nodemailer报错553 5.7.1发件人地址被拒绝如何解决
问题原因
- 报错
Nodemailer Error: Recipient command failed: 553 5.7.1: Sender address rejected: not owned by user的核心是SMTP服务商的发件人校验规则拦截:你当前配置的SMTP服务要求发件人地址必须和SMTP认证使用的process.env.MAIL_USER账号完全一致,或是你在服务商后台提前完成验证的发件人别名,不允许直接使用未验证的访客邮箱作为发件人,这是服务商防范垃圾邮件、伪造发件人行为的通用规则。 - 你此前以自有邮箱为发件人发信正常,就是因为发件人地址和SMTP认证账号匹配,符合校验要求。
修复方案
调整发件逻辑,保留使用体验同时符合SMTP规则:发件人地址用你自己的认证邮箱,新增replyTo字段设置为访客提交的邮箱,你收到邮件后直接回复就会自动发送到访客邮箱,完全不影响联系表单的使用逻辑。
你可以将代码中的message配置修改为如下内容:
const message = { from: { name: req.body.name, // 发件人名称可保留访客提交的名称,不触发校验 address: process.env.MAIL_USER // 发件人地址替换为你的SMTP认证账号 }, replyTo: req.body.mail, // 新增回复地址为访客邮箱 to: process.env.MAIL_USER, subject: req.body.subject, // 可在正文开头补充访客邮箱信息,方便查阅 text: `访客提交邮箱:${req.body.mail}\n\n反馈内容:${req.body.message}` };
额外校验点
如果修改后仍有问题,可以确认以下配置:
- 你的SMTP服务商是否开启了第三方客户端发信权限
- 你使用的
process.env.MAIL_PW是否为SMTP专用授权码,部分服务商不支持直接用邮箱登录密码作为SMTP密码
内容的提问来源于stack exchange,提问作者Bexy-Lyn
相关产品推荐
相关产品推荐

