使用Nodemailer发送Rediffmail邮件失败,求助解决
Rediffmail + Nodemailer 连接失败(ESOCKET错误)解决方案
问题描述
尝试用Nodemailer发送Rediffmail邮件,代码如下:
var transporter = nodemailer.createTransport({ host: "smtp.rediffmail.com", // hostname port:25, secureConnection: false, secure: false, tls: { ciphers: "SSLv3", }, auth: { user: process.env.MAILADDRESS, pass: process.env.MAILPASS, }, }); var mailOptions = { from: process.env.MAILADDRESS, to: email, subject: "Sending using Node.js", html: "<h1>hoohaa</h1>That was eafefesy!", }; transporter.sendMail(mailOptions, (err, info) => { if (err) { console.log(err); } else { console.log( `Password recovery Email sent to ${email} : ${info.response}` ); }}
出现错误:
{ errno: -4039, code: 'ESOCKET', syscall: 'connect', address: '202.137.235.17', port: 25, command: 'CONN' }
错误原因
该ESOCKET错误表示无法连接到Rediffmail的SMTP服务器,核心诱因:
- 端口25被本地防火墙/网络服务商拦截(多数环境会封禁25端口防范垃圾邮件)
- 强制使用已淘汰的SSLv3加密协议(Rediffmail服务器已不再支持该协议)
- SMTP配置参数与Rediffmail官方要求不匹配
解决步骤
1. 更换SMTP端口
Rediffmail官方推荐使用以下端口:
- 465(SSL加密,优先选择)
- 587(TLS加密)
2. 调整加密配置
移除过时的SSLv3配置,根据所选端口设置对应加密参数:
方案一:使用465端口(SSL)
var transporter = nodemailer.createTransport({ host: "smtp.rediffmail.com", port: 465, secure: true, // 465端口启用SSL加密 auth: { user: process.env.MAILADDRESS, pass: process.env.MAILPASS, }, });
方案二:使用587端口(TLS)
var transporter = nodemailer.createTransport({ host: "smtp.rediffmail.com", port: 587, secure: false, // 587端口通过STARTTLS协议升级加密,无需提前开启SSL auth: { user: process.env.MAILADDRESS, pass: process.env.MAILPASS, }, });
3. 额外检查项
- 确认Rediffmail账号已手动开启SMTP服务(部分邮箱默认关闭该功能)
- 验证环境变量
MAILADDRESS和MAILPASS的账号密码准确性 - 检查本地防火墙、杀毒软件是否拦截了SMTP端口
内容的提问来源于stack exchange,提问作者marsian8
相关产品推荐
相关产品推荐

