服务器无法发送注册邮件: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
相关产品推荐
相关产品推荐

