我做的很简单,但那不起作用。
我想要做的是发送延迟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秒,然后立即发送所有邮件。
答案 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);