Nodemailer - 如何处理enetunreach错误

4

我有一个使用nodemailer插件发送电子邮件的nodejs应用程序。这个应用程序99.99%的时间都可以正常工作,但昨天在PM2日志中出现了以下错误导致应用程序挂起。

mod.mailer: Error: connect ENETUNREACH 2a00:1450:400c:c04::6c:465 - Local (:::0)

我没有找到关于这种错误的很多信息。网络连接可能会出现问题。以下是我编写的发送邮件模块的代码。如何捕获此类错误并确保应用程序不会挂起,而是重试发送电子邮件。

var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport(process.env.TRANSPORT);

function mail(options) {
    transporter.sendMail({
        from: process.env.SUBDIRECTORY + '\@' + process.env.HOST + '\ \<geolytix@gmail.com\>',
        to: options.to,
        subject: options.subject,
        text: options.text
    }, function (err, info) {
        if (err) {
            console.log('mod.mailer: ' + err);
        }
        console.log('mod.mailer: ' + info.response);
    });
}

module.exports = {
    mail: mail
};
1个回答

0

这个问题是一个内部包捕获,当出现网络问题时会弹出。 因此,为了解决这个问题,您必须将代码放在try-catch块中,并递归调用您的函数。

function mail(options) {
  try{
    transporter.sendMail({
        from: process.env.SUBDIRECTORY + '\@' + process.env.HOST + '\ \<geolytix@gmail.com\>',
        to: options.to,
        subject: options.subject,
        text: options.text
    }, function (err, info) {
        if (err) {
            console.log('mod.mailer: ' + err);
        }
        console.log('mod.mailer: ' + info.response);
    });
    
  } catch(err){
    console.log(err);
    mail(options)
  }
    
}

注意: 这种技术也可能导致JavaScript无限堆叠,消耗内存直到超出引擎的容量,如果错误一直弹出。

其中一个解决方案是对递归进行检查,如果达到某个限制就停止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接