Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Javascript node.js延迟发送邮件_Javascript_Node.js_Email - Fatal编程技术网

Javascript node.js延迟发送邮件

Javascript node.js延迟发送邮件,javascript,node.js,email,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 co

我正在做一件简单的事情,但那不起作用

我想做的是发送延迟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秒,然后一次发送所有邮件。

您应该用异步实现取代同步forEach。
选项1。使用async.js并以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 */});

如果达到调用堆栈限制,递归函数将失败。想象一下5000封电子邮件排队。
 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);