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

NodeMailer在本地运行正常但部署到Heroku后无报错无法工作

本地正常部署Heroku后NodeMailer失效的解决方案
  • 检查Heroku环境变量配置
    本地开发时你大概率是用.env文件存储SMTP服务的账号、密码、端口等敏感配置,这类文件默认不会被提交到代码仓库,Heroku无法直接读取。你需要手动将所有SMTP相关的环境变量同步到Heroku:
    1. 登录Heroku控制台,进入对应项目的「Settings」页,找到「Config Vars」板块
    2. 逐一添加你本地.env里的所有SMTP相关变量,键名必须和代码中调用process.env.XXX的部分完全一致
    3. 也可以直接用Heroku CLI执行命令配置:heroku config:set SMTP_USER=你的邮箱 SMTP_PASS=你的授权码
  • 检查SMTP端口与安全配置
    Heroku默认封禁了SMTP默认的25端口,你必须切换为加密端口:
    • 端口设置为465时,transporter配置中的secure参数需设为true(启用SSL)
    • 端口设置为587时,transporter配置中的secure参数需设为false(启用TLS)
      可额外添加TLS配置避免证书校验问题:
    const transporter = nodemailer.createTransport({
      host: process.env.SMTP_HOST,
      port: process.env.SMTP_PORT,
      secure: process.env.SMTP_PORT == 465,
      auth: {
        user: process.env.SMTP_USER,
        pass: process.env.SMTP_PASS
      },
      tls: {
        rejectUnauthorized: false
      }
    })
    
  • 排查邮箱服务商的安全限制
    大部分主流邮箱(Gmail、QQ邮箱、Outlook等)都会拦截陌生IP的登录请求,Heroku的服务器IP是动态浮动的,大概率会被判定为异常登录:
    • 不要使用邮箱主密码作为SMTP登录凭证,要去邮箱后台开启SMTP服务后生成应用专用授权码,用授权码登录
    • 如果使用Gmail,需启用两步验证后生成应用专用密码,不要开启「低安全性应用访问」权限,该权限已经被Google废弃
  • 开启错误捕获排查根因
    你没有看到错误日志大概率是代码中没有捕获sendMail的异常,补充错误捕获逻辑后再用heroku logs --tail命令实时查看运行日志就能定位具体报错:
    // 回调写法
    transporter.sendMail(mailOptions, (error, info) => {
      if (error) return console.log('邮件发送错误:', error)
      console.log('邮件发送成功:', info.response)
    })
    // async/await写法
    try {
      await transporter.sendMail(mailOptions)
    } catch (e) {
      console.error('邮件发送错误:', e)
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:45:10