Nodemailer发送Gmail验证邮件失败,POST请求正常未收邮件如何解决?
问题排查与解决方案
你的代码逻辑无结构问题,邮件发送失败是Gmail安全策略限制导致的,按照以下步骤修复即可:
1. 补充邮件发送的错误捕获
你当前调用transporter.sendMail没有加await也没有捕获异步错误,所以即使发送失败接口也会返回成功提示,先修改这段代码:
// 替换原有transporter.sendMail代码段 try { await transporter.sendMail({ to: email, subject: 'Verify Account', html: `Click <a href = '${url}'>here</a> to confirm your email.` }) } catch (mailErr) { console.error('邮件发送失败:', mailErr) return res.status(500).send({ message: '验证邮件发送失败', error: mailErr.message }) }
2. 修正Gmail账号授权配置
目前Gmail已经不再支持直接使用账号密码登录第三方应用,也关闭了低安全性应用开关,需要完成以下配置:
- 登录发件人Google账号,开启两步验证功能
- 两步验证开启后,进入账号「应用密码」页面,生成一个专用的16位应用密码
- 将.env配置文件里的
EMAIL_PASSWORD替换为刚才生成的16位应用密码,注意不要保留空格 - 确认
process.env.EMAIL_USERNAME是完整的Gmail邮箱地址,格式为xxx@gmail.com
3. 补充transporter配置(可选)
如果完成上述配置后仍发送失败,可以给transporter补充tls配置:
const transporter = nodemailer.createTransport({ service: "Gmail", auth: { user: process.env.EMAIL_USERNAME, pass: process.env.EMAIL_PASSWORD, }, tls: { rejectUnauthorized: false } });
4. 测试验证
修改完成后先本地调试,查看控制台打印的邮件发送错误信息,确认无报错后再查收邮件,注意检查收件箱的垃圾邮件目录,验证邮件大概率会被归类到垃圾邮件中。
内容的提问来源于stack exchange,提问作者dorra amri
相关产品推荐
相关产品推荐

