You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:15:03