Nodemailer使用SMTP发信出现ETIMEDOUT连接超时错误如何解决?
Nodemailer SMTP超时错误排查解决方法
核心问题说明
你遇到的ETIMEDOUT报错是Node服务无法和目标SMTP服务器的25端口建立TCP连接导致的,按以下优先级排查即可:
第一步:优先排查25端口封禁问题
绝大多数云服务商、家庭宽带ISP都会默认封禁25端口的出站请求,用于防控垃圾邮件。你可以先在部署代码的服务器上执行命令测试连通性:telnet mail.tusharjoshi.tech 25
如果执行后长时间无响应、连接失败,就说明25端口不通,建议更换SMTP端口:
绝大多数邮箱服务商都支持587(STARTTLS协议)、465(SSL加密协议)两个邮件提交端口,修改对应配置即可:- 使用587端口配置示例:
let transporter = nodemailer.createTransport({ host: "mail.tusharjoshi.tech", port: 587, secure: false, // 587端口对应值为false,会自动开启STARTTLS加密 auth: { user: "contact@tusharjoshi.tech", pass: "mypAssword" }, tls: { rejectUnauthorized: false } });- 使用465端口配置示例:
let transporter = nodemailer.createTransport({ host: "mail.tusharjoshi.tech", port: 465, secure: true, // 465端口为SSL加密,对应值为true auth: { user: "contact@tusharjoshi.tech", pass: "mypAssword" }, tls: { rejectUnauthorized: false } });第二步:修正发件人格式错误
你当前配置的from字段值为tusharjoshi.tech,不符合SMTP协议要求的发件人格式,需要改为包含完整邮箱的格式,示例:
const mailOptions = { from: "Tushar Joshi <contact@tusharjoshi.tech>", // 正确格式 to: "hellotusharr2318@gmail.com", subject: `message from ${req.body.name}`, text: `Message recieved from ${req.body.email}: and message is about: ${req.body.message}` };
第三步:检查邮箱服务及权限配置
- 确认你的邮箱
contact@tusharjoshi.tech已经开启了SMTP服务 - 部分邮箱服务商要求使用单独的SMTP授权码登录,而非邮箱登录密码,确认你填写的密码符合要求
- 确认邮箱服务没有IP访问限制,你部署代码的服务器IP没有被邮箱服务拉黑
- 确认你的邮箱
第四步:检查服务器出站规则
确认你部署代码的云服务器安全组、防火墙的出站规则,已经放开了对应SMTP端口(25/465/587)的访问权限。
内容的提问来源于stack exchange,提问作者Tushar Joshi
相关产品推荐
相关产品推荐

