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

NodeJS服务使用Nodemailer发信出现SMTP连接被拒绝错误如何解决?

nodemailer连接Mailtrap报错排查及修复方案

核心错误原因

1. SMTP加密配置不匹配

Mailtrap的2525端口使用STARTTLS加密模式,你当前配置的secure: true仅适用于465端口的隐式TLS模式,参数错误导致握手被服务端拒绝,直接触发ECONNREFUSED报错。
修复方法:将secure: true修改为secure: false即可,nodemailer会自动适配STARTTLS规则完成加密连接。
修正后的配置参考:

const smtpTransport = createTransport({
        host: "smtp.mailtrap.io",
        port: 2525,
        secure: false, // 此处修改为false
        debug: true,
        logger: true,
        tls: {
            rejectUnauthorized: false
        },
        auth: {
            user: "24a411cb3f5900",
            pass: "2b78eab080e46d"
        }
    });

2. 异步逻辑顺序异常

smtpTransport.verify()为异步执行方法,你当前代码未等待连接校验完成就直接调用sendMail,所以会先打印sendMail回调中的断点日志,再抛出连接错误,和你观测到的日志表现完全一致。
建议优化逻辑:将发信逻辑放在verify的成功回调中执行,避免无效请求:

smtpTransport.verify(function(error, success) {
    if (error) {
      console.log("SMTP连接校验失败:", error);
    } else {
      console.log("Server is ready to take our messages");
      const mail = getEmailData(mailDetails, type);
      smtpTransport.sendMail(mail, function(error, response) {
          console.log("sendmail breakpoint");
          if(error) {
              console.log("发信失败:", error)
          } else {
              console.log( "email sent successfully")
          }
          smtpTransport.close();
      })
    }
});

额外排查方向

如果修改配置后仍报错,检查网络侧规则:

  • 部署NodeJS服务的服务器安全组是否开放了2525端口的出站权限,部分云服务商默认会封禁非标准端口的出站请求,需手动放行
  • 确认服务器的防火墙、代理规则未拦截发往smtp.mailtrap.io的请求,可在服务器终端执行telnet smtp.mailtrap.io 2525测试连通性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 03:15:02