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
相关产品推荐
相关产品推荐

