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

服务器无法发送注册邮件:Node.js+Nodemailer连接超时问题

注册邮件发送失败排查求助

我正在实现注册功能,用户成功注册后需收到含用户名和密码的邮件。目前用户信息可正常存入数据库,但邮件发送环节失败。

相关代码(mail.js)

const nodemailer = require("nodemailer");

let mailer = nodemailer.createTransport({
    host: "mail.foi.hr",
    port: 25,
    /* auth: {
        user: "",
        pass: ""
    }*/
});

exports.posaljiMail = async function (salje, prima, predmet, poruka) {
    console.log("im hereeee");
    message = {
        from: salje,
        to: prima,
        subject: predmet,
        text: poruka,
    };

    let odgovor = await mailer.sendMail(message);
    console.log(odgovor);
    return odgovor;
};

错误信息

node:internal/process/promises:289
            triggerUncaughtException(err, true /* fromPromise */);
            ^

Error: connect ETIMEDOUT 160.43.120.3:25
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1595:16) {     
  errno: -4039,
  code: 'ESOCKET',
  syscall: 'connect',
  address: '160.43.120.3',
  port: 25,
  command: 'CONN'
}

排查分析及解决建议

1. 端口25连接受阻

错误中的ETIMEDOUT表明你的服务器无法在指定时间内连接到mail.foi.hr的25端口,常见原因:

  • 你的服务器所在的云服务商/主机商默认封禁了25端口(多数平台为防控垃圾邮件会禁用该端口)。
  • 目标邮件服务器mail.foi.hr的防火墙拒绝了你的IP访问,或该服务器未对外开放25端口。

2. 缺失身份认证配置

你注释掉了auth段,当前主流邮件服务器几乎都要求身份认证才能发送邮件,无认证请求大概率会被直接拒绝。

3. 目标服务器SMTP配置验证

先通过telnet mail.foi.hr 25在本地或服务器上测试连接,若无法连通,说明该服务器25端口确实不可用;同时确认是否需要使用其他端口(如587、465这类加密端口,通常不会被封禁)。

具体修复步骤

  • 切换至587或465端口并启用加密,同时补充认证信息:
    let mailer = nodemailer.createTransport({
        host: "mail.foi.hr",
        port: 587,
        secure: false, // 587端口设为false,465端口设为true
        auth: {
            user: "你的邮箱账号",
            pass: "你的邮箱密码/授权码"
        }
    });
    
  • 若使用云服务器,联系服务商申请解封25端口,或直接使用服务商提供的内部SMTP服务。
  • 确认mail.foi.hr的SMTP认证规则,填写正确的账号密码,确保该账号具备邮件发送权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:57:21