Nodemailer联系表单本地运行正常,部署Heroku后报EAUTH错误如何解决?
问题排查与解决方案
EAUTH错误本质是Gmail SMTP服务身份验证失败,本地运行正常但Heroku部署后出错,按以下优先级排查:
- 第一步:确认Heroku环境变量配置正确
本地开发时你大概率用.env文件存储MAIL_USER和MAIL_PASS,但该文件不会被部署到Heroku。需要登陆Heroku后台,进入对应项目的「Settings」页面,找到「Config Vars」板块,确认已经添加了这两个环境变量,值和本地测试时完全一致,无多余空格或格式错误。
可以在Heroku CLI执行heroku config命令查看已配置的环境变量,确认两个参数存在且值正确。 - 第二步:使用Gmail应用专用密码登录
目前Gmail已经全面停止支持「低安全性应用访问」,直接使用账号登录密码会被拦截。需要先为你的Google账号开启两步验证,之后生成16位的应用专用密码,将该密码作为MAIL_PASS的值替换原有账号密码。 - 第三步:调整Nodemailer SMTP配置
直接指定Gmail SMTP参数比使用service: 'gmail'兼容性更强,修改传输器配置如下:const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, // 465端口需开启secure auth: { user: process.env.MAIL_USER, pass: process.env.MAIL_PASS } }); - 第四步:放行Gmail安全拦截
登陆你的Gmail账号,进入「安全」页面,查看「最近的安全活动」板块,找到来自Heroku的被拦截登录请求,手动信任该操作即可完成放行。
你可以在部署前在代码中添加日志打印环境变量的值,部署后执行heroku logs --tail查看运行日志,确认环境变量被正确读取,进一步缩小问题范围。
内容的提问来源于stack exchange,提问作者Carlos D
相关产品推荐
相关产品推荐

