使用ZOHO Mail时Nodemailer出现SMTP超时错误:原因与责任方?
ZOHO Mail + Nodemailer 发送邮件超时问题排查
我正在开发的Web应用用ZOHO Mail做邮件服务,搭配Nodemailer发送邮件。之前一直正常,今早测试时邮件发不出去,出现以下超时错误:
node:internal/errors:464 ErrorCaptureStackTrace(err); ^ Error: queryA ETIMEOUT smtp.zoho.com at QueryReqWrap.onresolve [as oncomplete] (node:dns:213:19) { errno: undefined, code: 'EDNS', syscall: 'queryA', hostname: 'smtp.zoho.com', command: 'CONN' }
控制器代码
module.exports.mailTest = function(user) { log(user); let transporter = nodemailer.createTransport({ service: 'zoho', auth: { user: mailUser, pass: mailPass } }); let userFirstName = user.name.split(' ')[0]; let mailOptions = { from: mailUser, to: user.email, subject: `Mail Check`, html: `<h2>Hi ${userFirstName}, Test Message</h2>` } try { transporter.sendMail(mailOptions); log('mail sent!'); } catch(err) { log(err); throw err; } }
请问该错误的实际含义是什么?需要我从本地修复,还是SMTP主机的问题?
错误含义
这个queryA ETIMEOUT smtp.zoho.com错误的核心是:你的应用在尝试通过DNS解析smtp.zoho.com对应的IP地址时超时了。简单说就是你的开发环境/服务器没法找到ZOHO邮件服务器的网络地址,导致连不上SMTP服务。
问题定位与修复建议
- 优先排查本地/服务器网络问题:
- 打开终端执行
ping smtp.zoho.com或nslookup smtp.zoho.com,看能不能正常解析出IP。如果解析超时,说明是你的网络DNS配置有问题,或者本地网络被限制访问ZOHO的DNS服务。 - 检查本地防火墙、代理工具,有没有拦截DNS请求或者限制了对
smtp.zoho.com的访问。 - 临时切换DNS服务器(比如换成8.8.8.8或114.114.114.114),再测试解析是否正常。
- 打开终端执行
- ZOHO端问题可能性低:
从错误类型来看,主要是本地DNS解析失败,大概率不是ZOHO的SMTP服务器直接故障。如果实在担心,可以查看ZOHO官方状态页面确认服务可用性。 - 代码异步逻辑修正:
你的代码里transporter.sendMail是异步方法,直接调用不会等待执行结果,try/catch也捕获不到异步错误。改成异步写法才能正确捕获异常:module.exports.mailTest = async function(user) { log(user); let transporter = nodemailer.createTransport({ service: 'zoho', auth: { user: mailUser, pass: mailPass } }); let userFirstName = user.name.split(' ')[0]; let mailOptions = { from: mailUser, to: user.email, subject: `Mail Check`, html: `<h2>Hi ${userFirstName}, Test Message</h2>` } try { await transporter.sendMail(mailOptions); log('mail sent!'); } catch(err) { log(err); throw err; } }
内容的提问来源于stack exchange,提问作者Duke Sanmi
相关产品推荐
相关产品推荐

