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' }

请教这是什么问题?


6 回复

问题分析

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 这个是个什么错误啊? 源码: QQ截图20160119153302.png

根据你提供的信息,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 命令的输出),以便进一步排查问题。

回到顶部