node.js发送延迟

时间:2016-07-14 06:15:25

标签: javascript node.js email

我做的很简单,但那不起作用。

我想要做的是发送延迟30秒的邮件。

以下是代码:

user.forEach(function(data) {


    var locals = {
        fname: data.Name,
        your_name: data.From,

    }

    template.render(locals, function(err, results) {

        if (err) {
            return console.error(err)
        } else {
            transporter.sendMail({

                to: data.Email,
                subject: "Welcome",
                replyTo: data.ReplyTo,
                html: results.html,
                text: results.text,
            }, function(error, info) {
                console.log("here");
                if (error) {
                    console.log(error);
                } else {
                    console.log('Message sent: ' + info.response);
                };

            });
        }

    });
});

此处用户是一个对象数组,其中包含详细信息,如电子邮件,来自,姓名等。

数组中的每个对象都包含要发送的特定邮件的详细信息。

我想发送邮件并等待30秒,然后发送第二个......等待等等。

我已经使用了setInterval和npm sleep,但这不起作用。它会等待30秒,然后立即发送所有邮件。

2 个答案:

答案 0 :(得分:1)

你应该用异步实现替换syncronous forEach 选项1。使用async.js eachLimit并以30秒的延迟呼叫回叫
选项2。您可以为您的发送电子邮件功能编写包装器,如:

var emails = ['email1', 'email2' /*...*/];
function sendEmailAndWait(email, callback){
    // your stuff
    transporter.sendMail(email, function(error, info) {
        // handle results
        if(!emails.length) return callback();
        setTimeout(function () {
            sendEmailAndWait(emails.shift(), callback);
        }, 30*1000)
    })
}
sendEmailAndWait(emails.shift(), function(){  /* allDone */});

答案 1 :(得分:0)

 setTimeout(function() {
  template.render(locals, function(err, results) {

    if (err) {
        return console.error(err)
    } else {
        transporter.sendMail({

            to: data.Email,
            subject: "Welcome",
            replyTo: data.ReplyTo,
            html: results.html,
            text: results.text,
        }, function(error, info) {
            console.log("here");
            if (error) {
                console.log(error);
            } else {
                console.log('Message sent: ' + info.response);
            };
        });
    }
});
 }, 3000);