Nodejs nodemailer Error: connect ETIMEDOUT
Nodejs nodemailer Error: connect ETIMEDOUT
使用nodemailer模块,发送邮件的JS文件为mail.js如下
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
service: 'QQ',
auth: {
user: '123@qq.com',
pass: 'XXX'
}
});
var mailOptions = {
from: '123@qq.com', // sender address
to: 'ABC@qq.com', // list of receivers
subject: 'Hello', // Subject line
text: 'Hello world', // plaintext body
html: '<b>Hello world </b>' // html body
};
transporter.sendMail(mailOptions, function(error, info){
if(error){
console.log(error);
}else{
console.log('Message sent: ' + info.response);
}
});
QQ邮箱的POP3/IMAP/SMTP/Exchange服务已经开启,node mail.js后报错
{ [Error: connect ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'connect' }
请教这是什么问题?
问题分析
Error: connect ETIMEDOUT
这个错误通常表示在尝试建立与服务器的连接时超时了。这可能是由于网络连接问题、防火墙设置或邮件服务提供商的服务器暂时不可达等原因造成的。
解决方案
1. 检查网络连接
确保你的网络连接正常,并且没有被防火墙或其他网络设备阻止与邮件服务器的连接。
2. 邮件服务提供商配置
确保你已经在QQ邮箱中正确启用了SMTP服务,并且使用的用户名和密码是正确的。
3. 使用更详细的错误信息
你可以通过添加更多的错误处理来获取更详细的错误信息,以便更好地诊断问题。
示例代码
以下是改进后的 mail.js
文件,包括更详细的错误处理:
var nodemailer = require('nodemailer');
// 创建一个SMTP传输对象
var transporter = nodemailer.createTransport({
host: 'smtp.qq.com', // QQ邮箱的SMTP主机
port: 465, // 端口号,通常为465
secure: true, // 使用SSL
auth: {
user: '123@qq.com', // 发件人邮箱地址
pass: 'XXX' // 发件人邮箱密码
}
});
var mailOptions = {
from: '123@qq.com', // 发件人地址
to: 'ABC@qq.com', // 收件人地址
subject: 'Hello', // 邮件主题
text: 'Hello world', // 邮件正文(文本格式)
html: '<b>Hello world</b>' // 邮件正文(HTML格式)
};
// 发送邮件
transporter.sendMail(mailOptions, function(error, info) {
if (error) {
console.error('Error occurred:', error);
return;
}
console.log('Message sent: ' + info.response);
});
关键点解释
- host: 设置为
smtp.qq.com
,因为QQ邮箱使用的是QQ的SMTP服务器。 - port: 设置为
465
,因为QQ邮箱使用的是SSL加密的SMTP服务。 - secure: 设置为
true
,以启用SSL加密。 - auth: 提供发件人的邮箱地址和密码。
- error 回调函数中,打印详细的错误信息以便于调试。
通过以上步骤,你应该能够更好地诊断并解决 connect ETIMEDOUT
错误。如果问题仍然存在,请检查你的网络环境和邮件服务提供商的配置。
var nodemailer = require(‘nodemailer’); var transport = nodemailer.createTransport(‘SMTP’, { service: ‘qq’, //use well known service auth: { user: ‘hankewins@qq.com’, pass: ‘123456’ } }); var data = { form: ‘Hankewins <hankewins.vip@qq.com’, to: ‘tomail@gmail.com,tomail2tomail2@gmail.com’, subject: ‘Hello world’, text: ‘Hello world, I am a test mail!’, html: ‘<b>Hello world, I am a test mail!</b>’ }; transport.sendMail(data, function(err, res){ if (err) { console.log(err); } else { console.log('Message sent: ’ + res.message); } }); 传输协议,hosts指定了么?
是你们公司内网做了处理吧,比如不允许使用SSL发东西啥的
题主解决了吗?? 我也遇到这个问题 ,家里网络或者云服务上都不行,尝试了QQ和163
求大神帮忙!fail: Error: connect ECONNREFUSED 127.0.0.1:25 这个是个什么错误啊?
源码:
根据你提供的信息,Error: connect ETIMEDOUT
表示在尝试连接到远程服务器时超时。这通常意味着你的网络环境或防火墙设置阻止了与 SMTP 服务器的连接。以下是几种可能的解决方法:
1. 检查网络连接
确保你的网络可以访问外部 SMTP 服务器。你可以尝试使用其他工具(如 telnet
或 ping
)来检查是否能连接到 QQ 邮箱的 SMTP 服务器(smtp.qq.com
,默认端口为 465
或 587
)。
telnet smtp.qq.com 587
2. 使用正确的 SMTP 端口
QQ 邮箱的 SMTP 服务器默认使用 465
(SSL)或 587
(TLS)端口。你可以显式地指定端口以确保正确连接。
3. 修改 nodemailer 配置
修改你的 mail.js
文件以包含正确的端口和安全协议(ssl
或 tls
)。
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
host: 'smtp.qq.com',
port: 587, // 尝试 465 (SSL) 或 587 (TLS)
secure: false, // true for 465, false for other ports
auth: {
user: '123@qq.com',
pass: 'XXX'
},
tls: {
rejectUnauthorized: false // 如果你遇到 SSL 证书错误,可以尝试这一项
}
});
var mailOptions = {
from: '123@qq.com',
to: 'ABC@qq.com',
subject: 'Hello',
text: 'Hello world',
html: '<b>Hello world</b>'
};
transporter.sendMail(mailOptions, function(error, info){
if(error){
console.log(error);
}else{
console.log('Message sent: ' + info.response);
}
});
4. 防火墙和代理设置
如果你在网络环境中使用防火墙或代理,确保这些设置不会阻止与 SMTP 服务器的连接。你可能需要配置代理以允许通过相应的端口进行连接。
5. 检查 QQ 邮箱的授权码
确保你使用的授权码是正确的,并且是通过 QQ 邮箱的设置页面生成的。
通过以上步骤,你应该能够解决 ETIMEDOUT
错误并成功发送邮件。如果问题仍然存在,请提供更多的网络诊断信息(例如,telnet
命令的输出),以便进一步排查问题。