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

Nodemailer搭配Gmail SMTP部署到Heroku后无法发邮件如何解决?

原因说明

该报错是谷歌安全机制拦截了来自Heroku的登录请求导致:Heroku的出口IP为动态池,单次解锁CAPTCHA仅对当时请求的IP生效,IP更新后会再次被拦截;且2022年起谷歌已逐步停用普通账号的「低安全性应用」登录权限,原有配置方案已失效。

可落地解决方案

方案1:使用应用密码(配置成本最低)

  1. 为你的谷歌账号开启两步验证
  2. 进入账号安全设置页生成应用密码,应用类别选「邮件」,设备自定义为你的项目名
  3. 将Heroku环境变量中DEMO_ACCOUNT_PASSWORD的值替换为生成的16位应用密码,重新部署即可正常使用。

方案2:切换为OAuth2认证

修改nodemailer传输配置,采用Gmail官方支持的OAuth2认证方式,不受IP变动影响:

const mail = nodemailer.createTransport({
  service: "gmail",
  auth: {
    type: "OAuth2",
    user: "你的Gmail地址",
    clientId: "谷歌云控制台生成的客户端ID",
    clientSecret: "谷歌云控制台生成的客户端密钥",
    refreshToken: "OAuth2刷新令牌",
    accessToken: "OAuth2访问令牌"
  }
});

你需要先在谷歌云控制台创建项目,开通Gmail API权限,生成对应OAuth2凭据即可使用。

方案3:使用专业邮件服务

生产环境建议切换为SendGrid、Mailgun等专门的事务性邮件服务,Heroku平台支持对应插件一键集成,发送稳定性更高,无需适配个人邮箱的安全限制。

内容的提问来源于stack exchange,提问作者user13152486

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:15:04