Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 诺德梅勒赢得';在出口处不要邮寄_Node.js_Email_Events_Nodemailer - Fatal编程技术网

Node.js 诺德梅勒赢得';在出口处不要邮寄

Node.js 诺德梅勒赢得';在出口处不要邮寄,node.js,email,events,nodemailer,Node.js,Email,Events,Nodemailer,在我的脚本中,我想发送一封电子邮件,其中包含有关使用NodeEmailer运行脚本的数据。在脚本的中间使用了同样的运输机< /代码>,并且我成功地发送了电子邮件。但是,退出事件处理程序中的相同代码根本不起任何作用。没有电子邮件,没有“Report Sent!”输出到控制台,尽管我确实将mailpoption变量的输出输出到控制台。假设异步操作在退出之前没有完成,我添加了一个临时延迟步骤来验证这一点。仍然没有生成电子邮件。我做错什么了吗 function exitHandler(er) { e

在我的脚本中,我想发送一封电子邮件,其中包含有关使用NodeEmailer运行脚本的数据。在脚本的中间使用了同样的<代码>运输机< /代码>,并且我成功地发送了电子邮件。但是,退出事件处理程序中的相同代码根本不起任何作用。没有电子邮件,没有“Report Sent!”输出到控制台,尽管我确实将
mailpoption
变量的输出输出到控制台。假设异步操作在退出之前没有完成,我添加了一个临时延迟步骤来验证这一点。仍然没有生成电子邮件。我做错什么了吗

function exitHandler(er) {
  end = moment().utc();

  // report template
  var tplPath = path.resolve('report.html');
  var juiceFileDeAsync = deasync(juice.juiceFile);
  var tpl = juiceFileDeAsync(tplPath, { webResources: {images: false} });
  var email = nunjucks.renderString(tpl, {
    startDate: start.format("MMMM Do YYYY, h:mm:ss a"),
    duration: end.diff(start,'seconds'),
    report: sentEmails,
    warns: warns,
    errors: errors
  });
  // email report
  mailOptions.to = '<valid email>';
  mailOptions.html = email;
  transporter.sendMail(mailOptions, function(error, info) {
    console.log('Report sent!', error, info);
  });
  console.log(mailOptions);
  if (er) {
    console.log(er);
  }

  var e = new Date().getTime() + (10 * 1000);
  while (new Date().getTime() <= e) {
    ;
  }

}

// do something when app is closing
process.on('exit', exitHandler);
process.on('uncaughtException', exitHandler);
函数exitHandler(er){
结束=力矩().utc();
//报告模板
var tplPath=path.resolve('report.html');
var juiciefiledeasync=deasync(juice.juiciefile);
var tpl=juiceFileDeAsync(tplPath,{webResources:{images:false});
var email=nunjucks.renderString(tpl{
startDate:start.format(“MMMM-Do-YYYY,h:mm:ss-a”),
持续时间:end.diff(开始,秒),
报告:Sent电子邮件,
警告:警告,,
错误:错误
});
//电子邮件报告
mailpoptions.to='';
mailpoptions.html=电子邮件;
transporter.sendMail(邮件选项,函数(错误,信息){
log('已发送报告!',错误,信息);
});
日志(邮件选项);
如果(er){
控制台日志(er);
}
var e=new Date().getTime()+(10*1000);
while(new Date().getTime()
查看事件:退出文档:

process.on('exit', function(code) {
    // do *NOT* do this
    setTimeout(function() {
        console.log('This will not run');
    }, 0);
    console.log('About to exit with code:', code);
});
一旦所有退出侦听器完成运行,进程将退出。因此,您只能在此处理程序中执行同步操作


我猜我看错了。我以为异步操作会排队,如果它们在处理程序完全退出之前运行,那么它们将在进程结束之前运行。因此,延迟将确保异步操作在完全退出之前完成。是否存在实际的“阻塞”在异步操作上?如果是,任何同步发送电子邮件的库?即使是process.nextTick也不会启动(刚刚测试过)。我不能推荐节点的同步电子邮件客户端…网络/套接字操作再次是异步的。您可以尝试同步写入文件,并使用cron定期检查文件并通过电子邮件重新发送。