【问题标题】:Nodemailer - How to handle enetunreach errorNodemailer - 如何处理 enetunreach 错误
【发布时间】:2017-04-28 10:52:04
【问题描述】:

我有一个nodejs 应用程序,它使用nodemailer 插件发送电子邮件。这在 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
};

【问题讨论】:

    标签: node.js error-handling nodemailer


    【解决方案1】:

    该问题是出现网络问题时弹出的内部包捕获。 因此,要解决这个问题,您还必须将代码放入 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 无限期地堆积在自己身上,并消耗内存直到它们超过引擎的容量。

    其中一个解决方案是检查递归,如果达到某个限制,该递归将下降。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多