使用Nodemailer通过Gmail发送邮件遇ETIMEDOUT错误求助
解决Nodemailer连接Gmail SMTP超时(ETIMEDOUT)问题
你遇到的Error: connect ETIMEDOUT错误本质是无法建立到Gmail SMTP服务器的网络连接,以下是具体排查和解决步骤:
1. 排查网络与防火墙限制
- 先测试本地网络能否访问Gmail的SMTP端口:在终端执行
telnet smtp.gmail.com 587或curl -v smtp://smtp.gmail.com:587,如果无法连接,说明网络层面被拦截 - 切换到个人热点或其他非受限网络(比如公司/校园网络可能封禁587端口)
- 临时关闭本地防火墙、杀毒软件的网络防护,确认是否是它们阻止了连接
2. 验证Gmail账号配置
- 确保你的Gmail账号已开启两步验证,并且使用的是应用专用密码(不是邮箱登录密码),普通密码无法用于SMTP认证
- 确认
mailOptions里的from字段和auth.user完全一致,Gmail强制发件人必须是认证的账号
3. 调整Nodemailer配置参数
尝试使用SSL端口465
587是TLS起始端口,部分网络环境下465的SSL连接更稳定,修改配置如下:
var nodemailer = require("nodemailer"); var transporter = nodemailer.createTransport({ auth: { user: "你的邮箱地址", pass: "应用专用密码", }, host: "smtp.gmail.com", port: 465, secure: true, // 启用SSL加密 }); var mailOptions = { from: "你的邮箱地址", to: "收件人邮箱", subject: "Sending Email using Node.js", text: "That was easy!", }; transporter.sendMail(mailOptions, function (error, info) { if (error) { console.log(error); } else { console.log("Email sent: " + info.response); } });
延长超时时间
给连接添加超时参数,避免因网络延迟导致的超时:
var transporter = nodemailer.createTransport({ auth: { user: "你的邮箱地址", pass: "应用专用密码", }, host: "smtp.gmail.com", port: 587, secure: false, requireTLS: true, connectionTimeout: 10000, // 10秒连接超时 greetingTimeout: 10000 });
4. 排查DNS解析问题
如果DNS解析异常,可直接指定Gmail SMTP服务器的IP(比如错误信息里的74.125.140.108),替换host字段:
host: "74.125.140.108"
内容的提问来源于stack exchange,提问作者Muhammad Jamshaid
相关产品推荐
相关产品推荐

