Node.js使用nodemailer调用Gmail SMTP发送邮件连接超时如何解决?
错误产生原因
- 网络层连通性故障:Gmail SMTP服务在部分区域无法直接访问,本地网络到
smtp.gmail.com的465端口TCP链路被阻断,直接触发连接超时错误,这是该错误最常见的诱因。 - 配置项位置错误:你的代码中
tls配置被错误放在auth对象内部,正确位置应该和host、port平级,错误的配置会导致TLS握手逻辑异常,进一步引发连接失败。 - 端口访问被拦截:本地防火墙、运行环境的安全组规则禁止了465端口的出站请求,也会导致TCP连接无法建立触发超时。
- Gmail账号权限配置错误:未开启两步验证、未生成应用专用密码的Gmail账号,无法通过SMTP方式直接登录发信,部分场景下也会表现为连接类错误。
修复方案
1. 修正nodemailer配置
首先调整transport配置的结构,修正tls配置位置,参考正确配置如下:
let transporter = nodemailer.createTransport({ host: "smtp.gmail.com", port: 465, secure: true, // 465端口对应secure为true,旧版本的secureConnection字段已被废弃,建议替换为secure tls: { rejectUnauthorized: false }, auth: { user: '你的Gmail邮箱地址', pass: '你的Gmail应用专用密码' }, });
2. 排查网络连通性
在运行代码的环境中执行命令测试端口连通性:telnet smtp.gmail.com 465
如果无法连通,需要先解决网络到Gmail SMTP服务的连通问题。
3. 配置Gmail账号权限
登录对应的Gmail账号,先开启两步验证,随后在账号安全设置中生成应用专用密码,将生成的16位应用专用密码替换配置中的pass字段,不要直接使用Gmail账号的登录密码。
4. 检查端口拦截规则
确认运行环境的本地防火墙、云服务器安全组的出站规则,放开465端口的访问限制,避免端口被拦截。
内容的提问来源于stack exchange,提问作者Fabian-Ivo Horvatic
相关产品推荐
相关产品推荐

