Nodemailer发信失败 EHLO/HELO携带127.0.0.1被拒如何解决
问题现象
上周在Windows 10电脑上作为计划任务运行的多个Nodemailer发信脚本突然停止工作。先后尝试更新Node.js与Nodemailer版本、关闭系统防火墙、更换其他电脑测试,均无法解决发信故障。联系邮件服务商后对方确认服务端未做任何配置变更,且使用Mozilla Thunderbird客户端可正常收发该邮箱邮件。
开启Nodemailer debug调试模式后,获取到如下运行日志:
[2022-06-20 00:23:25] DEBUG Creating transport: nodemailer (6.7.5; SMTP/6.7.5[client:6.7.5]) [2022-06-20 00:23:25] DEBUG Sending mail using SMTP/6.7.5[client:6.7.5] [2022-06-20 00:23:26] DEBUG [VIUENUHea4] Resolved mailx.freeparking.co.nz as 43.245.52.240 [cache miss] [2022-06-20 00:23:26] INFO [VIUENUHea4] Secure connection established to 43.245.52.240:465 [2022-06-20 00:23:29] DEBUG [VIUENUHea4] S: 220 mailx.hosts.net.nz - ESMTP - jessie - Mon, 20 Jun 2022 12:23:29 +1200 [2022-06-20 00:23:29] DEBUG [VIUENUHea4] C: EHLO [127.0.0.1] [2022-06-20 00:23:29] DEBUG [VIUENUHea4] S: 550-#h1 - An IP of 127.0.0.1 as a HELO is not currently accepted due to high [2022-06-20 00:23:29] DEBUG [VIUENUHea4] S: 550 volumes of bot activity [2022-06-20 00:23:29] DEBUG [VIUENUHea4] C: HELO [127.0.0.1] [2022-06-20 00:23:29] INFO [VIUENUHea4] Connection closed [2022-06-20 00:23:29] ERROR [VIUENUHea4] Connection closed unexpectedly [2022-06-20 00:23:29] DEBUG [VIUENUHea4] Closing connection to the server using "end" [2022-06-20 00:23:29] ERROR Send Error: Connection closed unexpectedly
问题答复
你的判断完全正确。日志中服务端已经明确返回550错误码,提示因垃圾bot活动过多,当前不接受HELO/EHLO阶段携带127.0.0.1地址的请求,这就是连接被意外断开的直接原因。
Nodemailer支持手动修改EHLO/HELO携带的标识,创建SMTP传输实例时,在配置项中添加name字段即可自定义该值,配置示例如下:
const transporter = nodemailer.createTransport({ host: "mailx.freeparking.co.nz", port: 465, secure: true, name: "本机主机名/公网IP/邮箱域名", // 该字段即为EHLO/HELO阶段上报的身份标识 auth: { user: "你的邮箱账号", pass: "你的邮箱密码或授权码" } });
name字段不要填写127.0.0.1这类回环保留地址即可:Windows系统可直接在命令行执行hostname命令获取本机主机名填入,也可以填写本机公网IP、邮箱对应的域名,均可通过服务商的校验规则。手动指定该字段后,Nodemailer不会再自动探测本机网络地址生成HELO标识,可彻底规避这类自动探测拿到异常地址的问题。
其他可行解决方案:
- 排查本机网络变动:该问题突然出现通常是近期系统更新、安装虚拟网卡/代理软件导致本地网络路由变化,Nodemailer自动探测地址时拿到了回环地址,如不需要相关虚拟网卡/代理可直接卸载或禁用,也能恢复默认探测逻辑。
- 更换连接端口:可尝试切换到SMTP的587端口走STARTTLS加密连接,部分服务商在587端口的HELO校验规则比465端口宽松。
- 如以上方案均无效,可联系邮件服务商将你的出口IP加入白名单,跳过HELO阶段的地址校验。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

