node.js异步发送电子邮件

时间:2013-03-27 15:31:09

标签: node.js

我是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);
    });    
};

1 个答案:

答案 0 :(得分:1)

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

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

nodemailer可以配置为使用SMTP来发送电子邮件,或者将它们发送到sendmail(这是您应该使用的传输); node-email只能通过电子邮件发送给sendmail。在这两种情况下,sendmail也可以是另一个MTA,如Exim或Postfix,它们提供与sendmail兼容的界面。