Hapi中使用Nodemailer发信报需域名错误 单独运行代码正常
问题原因
这个501 sender address must contain a domain错误和Nodemailer传输器的auth.user配置无关,错误出在发信请求的发件人地址参数上:
SMTP协议要求发件人地址必须是带域名的完整邮箱格式,smtp2go的身份验证用户名支持不带域名的格式,但发信时的from字段不能直接复用auth的用户名。
你在Hapi外测试正常,移入项目报错,大概率是项目内的发信逻辑误将from字段取值设为了不带域名的some-username,和auth.user混用了。
解决方案
- 检查
transporter.sendMail()方法的入参,确保from字段为完整带域名的合法邮箱,格式示例:
// 正确的发信调用示例 await transporter.sendMail({ from: "业务通知 <no-reply@yourdomain.com>", // 必须是带域名的完整邮箱 to: "收件人邮箱", subject: "邮件标题", text: "邮件内容" })
- 确认Hapi项目的配置文件中,SMTP身份验证用户名和发件人地址是分开配置的,不要混淆两个字段的取值。
- 若仍需排查问题,可在创建传输器时开启调试日志,查看完整SMTP交互信息:
const transporter = nodemailer.createTransport({ host: "mail.smtp2go.com", port: 587, auth: { user: "some-username", // smtp2go给的不带域名的验证用户名 pass: "your-smtp2go-password" }, debug: true, // 开启调试日志 logger: true // 打印SMTP交互信息 })
内容的提问来源于stack exchange,提问作者Audi
相关产品推荐
相关产品推荐

