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

Nodemailer在开发环境正常,生产环境无法发邮件如何解决?

解决Nodemailer+Gmail SMTP生产环境无法发邮件的问题
  • 检查Gmail账户安全设置
    Gmail现已禁用“不太安全的应用”访问权限,开发环境可能靠临时绕过验证正常运行,但生产环境服务器IP会触发安全拦截,必须用以下两种方式之一:

    • 启用两步验证后生成应用专用密码:先给Gmail账户开启两步验证,再在Google账户安全设置里找到“应用专用密码”,生成专属密码替换环境变量里的SMPT_PASSWORD。
    • 改用OAuth2认证:若不想开两步验证,可使用OAuth2方式配置transporter,需要在Google Cloud Console创建OAuth客户端ID,拿到相关凭证后修改代码:
      const transporter = nodeMailer.createTransport({
        service: 'gmail',
        auth: {
          type: 'OAuth2',
          user: process.env.SMPT_MAIL,
          clientId: process.env.OAUTH_CLIENT_ID,
          clientSecret: process.env.OAUTH_CLIENT_SECRET,
          refreshToken: process.env.OAUTH_REFRESH_TOKEN,
          accessToken: process.env.OAUTH_ACCESS_TOKEN,
        },
      });
      
  • 排查生产环境网络限制
    多数云服务商默认屏蔽25端口,Gmail SMTP支持465(SSL)和587(TLS)端口,直接指定端口和安全协议避免被拦截:

    const transporter = nodeMailer.createTransport({
      host: 'smtp.gmail.com',
      port: 465,
      secure: true, // 465端口对应SSL
      // 或用587端口:port:587, secure: false, tls: {rejectUnauthorized: false}
      auth: {
        user: process.env.SMPT_MAIL,
        pass: process.env.SMPT_PASSWORD, // 此处填应用专用密码
      },
    });
    
  • 添加错误捕获与日志
    生产环境无控制台输出,必须加错误捕获打印详细日志,才能定位是认证失败、网络超时还是其他问题:

    exports.sendEmail = async (options) => {
      try {
        const transporter = nodeMailer.createTransport({
          service: "gmail",
          auth: {
            user: process.env.SMPT_MAIL,
            pass: process.env.SMPT_PASSWORD,
          },
        });
    
        // 先验证transporter配置有效性
        await transporter.verify();
    
        const mailOptions = {
          from: process.env.SMPT_MAIL,
          to: options.email,
          subject: options.subject,
          html: options.message,
        };
    
        await transporter.sendMail(mailOptions);
        console.log('邮件发送成功');
      } catch (error) {
        console.error('邮件发送失败:', error.message, error.stack);
        throw error; // 抛出错误供上层处理
      }
    };
    
  • 检查Gmail发送限制
    Gmail免费账户每日最多发送500封邮件,若生产环境发送量超标也会失败,这种情况建议更换Google Workspace账户或第三方邮件服务(如SendGrid、Mailgun)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:51:17