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

Node.js使用net模块建立SMTP连接时出现ETIMEDOUT错误求助

Node.js SMTP连接MX地址超时问题排查与解决

我尝试通过Node.js连接远程MX地址,为邮箱地址建立SMTP连接,使用的代码如下:

function validate(email) {
  // 从邮箱提取域名
  const domain = email.split("@")[1];

  // 执行DNS MX记录查询
  dns.resolveMx(domain, (err, addresses) => {
    if (err || addresses.length === 0) {
      console.log("Invalid email domain");
      return;
    }

    // 连接SMTP服务器
    console.log("Found addresses for " + domain, addresses);
    for (let address of addresses) {
      const smtpServer = address.exchange;
      console.log("Checking: ", smtpServer);
      const socket = net.createConnection(25, smtpServer);
      socket.on("connect", () => {
        console.log("Connected to SMTP server");
        // 发送HELO命令
        socket.write("HELO example.com\n", () => {
          console.log("Sent HELO command");
        });
      });
      socket.on("error", (err) => {
        console.log(err);
      });
      socket.on("data", (data) => {
        console.log(data.toString());
        // 验证收件人邮箱地址
        if (data.toString().startsWith("250")) {
          socket.write(`RCPT TO:<${email}>\n`, () => {
            console.log(`Sent RCPT TO command for ${email}`);
          });
        }
      });
      socket.on("end", () => {
        console.log("SMTP connection closed");
      });
    }
  });
}

执行validate("<合法邮箱地址>")时,出现连接超时错误:

Error: connect ETIMEDOUT <ip地址>
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1247:16) {
  errno: -4039,
  code: 'ETIMEDOUT',
  syscall: 'connect',
  address: <ip地址>,
  port: 25
}

我已经尝试以下排查步骤但未解决问题:

  • 检查网络连通性
  • 验证SMTP服务器地址
  • 尝试更换SMTP服务器
  • 延长连接超时时间

潜在原因分析

  1. 端口25被屏蔽:多数ISP会默认屏蔽端口25以防范垃圾邮件,这是连接超时最常见的诱因。
  2. SMTP服务器防火墙限制:目标MX服务器的防火墙可能直接拦截了你的IP,或仅允许特定IP段发起连接。
  3. 反向DNS/PTR记录缺失:不少SMTP服务器会校验发起连接的IP是否有反向解析记录,无记录则会拒绝连接或导致超时。
  4. 速率限制触发:短时间内频繁连接同一SMTP服务器,可能触发对方的速率限制策略,导致连接被阻断。
  5. 网络路由故障:你的网络与目标服务器之间的路由链路存在异常,数据包无法正常传输。

可行解决办法

  1. 切换替代端口:改用SMTP的常用替代端口,比如587(邮件客户端提交端口)或465(SSL加密端口),替换代码中的25。
  2. 确认ISP端口限制:联系你的ISP确认是否屏蔽了端口25,若被屏蔽可申请解除,或使用ISP提供的中转SMTP服务器。
  3. 配置反向DNS记录:如果你的服务器有固定公网IP,联系服务商添加对应的PTR反向解析记录。
  4. 优化连接逻辑:
    • 按MX记录的priority优先级从高到低依次尝试连接,避免并行连接触发限制。
    • 添加重试机制,并设置合理的重试间隔,避免频繁请求。
  5. 使用成熟SMTP库:放弃手动编写Socket连接,改用nodemailer这类成熟库,它们已处理多数连接异常和兼容性问题,能提升稳定性。
  6. 检查目标服务器防火墙规则:若为企业内部服务器,确认你的IP在允许列表中;若为公共邮箱服务器,查看其官方文档的连接要求。

内容的提问来源于stack exchange,提问作者Md.Reyad Hossain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:32:57