You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:05:34