javascript - node.js 延迟发送邮件

标签 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);
                };

            });
        }

    });
});

这里的 user 是一组对象,其中包含电子邮件、发件人、姓名等详细信息。

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

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

我使用了 setInterval 和 npm sleep,但它们不起作用。它等待 30 秒,然后一次发送所有邮件。

最佳答案

您应该用异步实现替换同步 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 */});

关于javascript - node.js 延迟发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38366758/

相关文章:

javascript - 如何用圆弧法画圆?

javascript - 在 v2 上的 chart.js 中的图表上绘制水平线

c# - 电子邮件验证正则表达式 C#

email - 如何通过 Gmail 使用简单的 SMTP 命令发送电子邮件?

json - 使用 Node.js 加载海量数据

html - 取消订阅标签是如何工作的?

javascript - 在 JavaScript 中构建 IntelliSense/AutoComplete

javascript - Ionic3 需要重新加载才能显示 json

node.js - 如何在 node.js 中获取视频的长度

node.js - 尽管已链接,但从 Azure 静态 Web 应用程序调用应用服务 API 时仍获得未经授权 (401)