使用Nodemailer结合Mailgun发邮件时535认证失败如何解决?
解决Nodemailer + Mailgun 535 Authentication failed错误
核心排查点(针对Mailgun平台)
- 确认SMTP凭证类型:Mailgun的SMTP_USER固定为
postmaster@<你的已验证域名>,SMTP_PASS是该域名对应的SMTP密钥,不是你的Mailgun账户登录密码,二者完全不同。 - 检查域名验证状态:登录Mailgun后台,进入对应域名的设置页,确认DKIM、SPF、MX记录已完成DNS验证,未验证的域名会被拒绝SMTP请求。
- 核对SMTP服务器配置:
- 服务器地址必须是
smtp.mailgun.org - 端口优先用587(TLS模式,对应Nodemailer配置
secure: false),或465(SSL模式,对应secure: true),不要使用其他端口。
- 服务器地址必须是
- 检查IP白名单限制:若你的Mailgun账户开启了IP白名单,需确保应用服务器的公网IP已添加到白名单中(路径:Mailgun后台 → Security → IP Whitelist)。
- 测试凭证有效性:用命令行直接验证SMTP凭证,排除代码层面问题:
curl -v smtp://smtp.mailgun.org:587 --mail-from postmaster@yourdomain.com --mail-to test@example.com --user 'postmaster@yourdomain.com:your_smtp_password' - 检查Nodemailer配置细节:确保auth参数无多余空格、特殊字符未被转义,正确配置示例:
const transporter = nodemailer.createTransport({ host: 'smtp.mailgun.org', port: 587, secure: false, auth: { user: 'postmaster@yourdomain.com', // 必须是postmaster开头的域名邮箱 pass: 'your_mailgun_smtp_secret' // 域名的SMTP密钥,非账户密码 } }); - 查看Mailgun官方日志:登录Mailgun后台的Logs页面,查看具体的拒绝原因,日志会给出比Nodemailer更详细的认证失败信息(比如IP被拦截、凭证无效等)。
内容的提问来源于stack exchange,提问作者Whimsy Cat
相关产品推荐
相关产品推荐

