Javascript node.js延迟发送邮件
我正在做一件简单的事情,但那不起作用 我想做的是发送延迟30秒的邮件 代码如下: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
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);