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

证书链中存在自签名证书导致邮件发送失败问题求助

邮件发送失败问题排查与解决

本该收到邮件但未成功发出,报错信息如下:

Error: self-signed certificate in certificate chain
at TLSSocket.onConnectSecure (node:_tls_wrap:1674:34)
at TLSSocket.emit (node:events:518:28)
at TLSSocket._finishInit (node:_tls_wrap:1085:8)
at ssl.onhandshakedone (node:_tls_wrap:871:12) { code: 'ESOCKET', command: 'CONN' }

使用的Nodemailer代码:

const transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
      user: process.env.MAIL_ID,
      pass: process.env.MP,
    },
  });
  const info = await transporter.sendMail({
    from: '" Hey 👻" <example2023@gmail.com>',
    to: data.to,
    subject: data.subject,
    text: data.text,
    html: data.htm,
  });

  console.log('Message sent: %s', info.messageId);
  console.log('Preview URl: %s', nodemailer.getTestMessageUrl(info));
});

module.exports = sendEmail;

解决方案

临时方案(仅开发环境)

在 transporter 配置中添加 tls: { rejectUnauthorized: false },关闭证书校验:

const transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    auth: {
      user: process.env.MAIL_ID,
      pass: process.env.MP,
    },
    tls: {
      rejectUnauthorized: false
    }
  });

⚠️ 注意:生产环境禁止使用此方法,会引入安全风险。

生产环境根本解决办法

  • 检查本地环境证书链完整性,安装缺失的根证书。
  • 如果使用了代理或VPN,这类工具可能生成自签名证书导致校验失败,尝试关闭后重试。
  • 针对Gmail SMTP:
    • 若账号未开启2FA,可临时开启“不太安全的应用访问”(不推荐长期使用)。
    • 若账号开启了2FA,生成并使用App密码进行认证(推荐方式)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:02:41