使用带认证代理的Nodemailer发邮件失败:Socks5连接被拒绝
解决Nodemailer通过Socks5代理发送邮件报错ConnectionRefused的问题
问题重现
使用带认证的Socks5代理时,Nodemailer发送邮件失败,报错:Error: Socks5 proxy rejected connection - ConnectionRefused
不使用代理时邮件发送正常,相关代码如下:
const nodemailer = require('nodemailer'); let transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, // true для порта 465, false для других портов auth: { user: 'test@gmail.com', pass: 'zzxxcc' }, proxy: 'socks://user:pass@138.59.1.1:5555' }); transporter.set('proxy_socks_module', require('socks')); let mailOptions = { from: "test@gmail.com", to: "priem@gmail.com", subject: "theme", text: "hi" }; transporter.sendMail(mailOptions, (error, info) => { if (error) { ended = error.message; resolve() } else { ended = 1; resolve() } });
解决方案
测试代理连通性
先用命令行验证代理能否正常连接到目标SMTP服务器:curl --socks5 user:pass@138.59.1.1:5555 https://smtp.gmail.com:465如果命令返回连接失败,说明代理服务器本身不可用,联系提供商排查。
校验代理认证信息
确认代理的用户名、密码没有URL特殊字符(如@、:),如果有需进行URL编码。例如密码中的@要替换为%40。改用对象式代理配置
避免字符串解析可能出现的问题,改用对象形式配置代理:let transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 465, secure: true, auth: { user: 'test@gmail.com', pass: 'zzxxcc' }, proxy: { host: '138.59.1.1', port: 5555, auth: { user: 'user', pass: 'pass' }, type: 'socks5' } });更新socks模块版本
旧版本socks模块可能存在兼容性问题,重新安装最新稳定版:npm uninstall socks npm install socks@latest确认代理端口权限
检查代理服务器是否允许访问SMTP端口(465),部分代理会限制特定端口的出站连接,需要联系代理提供商开启权限。
内容的提问来源于stack exchange,提问作者Anna Ermilova
相关产品推荐
相关产品推荐

