【问题标题】:node.js asynchronous sending of emailnode.js 异步发送邮件
【发布时间】:2013-03-27 15:31:09
【问题描述】:

我是 node.js 的新手,正在使用 restify、mongoose 和 mongodb 构建服务。我正在构建的服务之一需要发送一封电子邮件,并且不需要通知服务的消费者电子邮件的发送状态。我使用下面的代码作为测试创建了代码,它以我想要的方式工作,但我想确保没有我没有看到的潜在问题。我担心的是,如果此服务在短时间内被调用 1,000 次并且电子邮件发送速度有些慢(每次 1-3 秒),那么这会导致我的节点服务器性能下降吗?我不确定这些项目是如何在内部排队的,也不确定是否有限制。我假设 process.nextTick 基本上将项目排队等待执行,但是在开始压倒节点的事件循环之前,项目的数量是否有限制?这是我的测试代码:

var sendUsingTemplate = function(template, mergeData) {
    console.log('emailManager.sendUsingTemplate starting...');
    console.log('template: ' + template);
    console.log('mergeData: ' + mergeData);
    process.nextTick(function(){
        console.log('setting up async code in here...');
        setTimeout(function() {
           console.log('ok done with async!'); 
        }, 10000);
    });    
};

【问题讨论】:

    标签: node.js


    【解决方案1】:

    由于发送电子邮件本质上是基于 I/O 的操作,我认为您不需要 process.nextTick(因为无论如何 Node 都可以很好地处理 I/O)。

    但是,我建议您使用本地 MTA(邮件传输代理),它将承担实际发送电子邮件的部分(SMTP 部分)。在该设置中,Node 会将邮件发送到本地 MTA(这是一个快速操作),然后 MTA 将开始发送这些电子邮件。当接收邮件服务器离线或暂时拒绝传入邮件时,MTA 通常也会处理邮件排队。

    nodemailer 可以配置为使用 SMTP 来传递电子邮件,或者将它们交给 sendmail(这是您应该使用的传输方式); node-email 只将电子邮件交给 sendmail。在这两种情况下,sendmail 也可以是另一个 MTA,例如 Exim 或 Postfix,它们提供了与 sendmail 兼容的接口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 2011-05-06
      • 2015-07-28
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      相关资源
      最近更新 更多