我想使用异步方式向用户发送多封邮件。
- user.js 文件
var emailUtil = require("./emailUtil.js");
var userdata[100];
// Suppose in userdata there are multiple data, let it be 100
for (let i = 0; i < userdata.length; i++) {
let emailBody = 'body of the mail', emailSubject = 'SGT Schedule';
emailUtil.sendEmail(emailBody, '' , emailSubject, '' , '' , user_data.email, 'Your Name', '');
}
在我编写电子邮件发送功能的另一个文件中
- emailUtil.js
// Email Util File
var nodemailer = require('nodemailer');
// Not the movie transporter!
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'email id', // Your email id
pass: '*******' // Your password
}
});
module.exports = {
sendEmail: function sendMail(varhtml,vartext, varsubject,varfrom, varfrom_name,varto, varto_name, reply_to_email ) {
// setup e-mail data with unicode symbols
var mailOptions = {
to: [varto], // list of receivers
subject: varsubject, // Subject line
text: vartext, // plaintext body
html: varhtml // html body
};
console.log(mailOptions);
// send mail with defined transport object
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
return console.log(error);
} else {
return console.log(info);
}
});
}
}
我想立即发送回复。我不需要等待电子邮件 因此,为了做到这一点,我正在考虑使用循环但异步地发送邮件。
目前,我是在发送邮件之前发送回复,然后调用邮件函数吗?如果有人向该 api 发送另一个请求,那么它将比平时花费更多时间,因为 node.js 是单线程,并且该线程正在等待执行其代码(之前的 api 调用总线用于发送邮件),或者它不会通过创建该文件的另一个实例来查看该线程
希望我能够正确解释我的问题。如果有任何疑问,请告诉我
最佳答案
sendEmail: (somevariables balbla) {
//some code
transporter.sendEmail((err, res) => {
console.log(err);
console.log(res);
});
}
可以这样调用该函数,以达到预期的结果:
for(let i = 0; i < 100; i++) {
sendEmail(someParams);
}
它会被调用一百次,不关心也不等待响应。 现在,如果您的电子邮件功能是这样的:
sendEmail: (somevariables balbla, callback) {
//some code
transporter.sendEmail((err, res) => {
console.log(err);
console.log(res);
return callback(err, res);
});
}
您仍然可以使用循环调用它并忽略回调返回的任何内容。如果你的函数是这样的,也是一样的:
sendEmail: (somevariables balbla, callback) {
return new Promise((resolve, reject) => {
//some code
transporter.sendEmail((err, res) => {
console.log(err);
console.log(res);
return resolve(res);
});
});
}
tl;dr 在循环中调用您的函数,它将执行您想要的操作。如果您愿意,您可以让您的函数返回一个 promise 或回调,以防在其他情况下您想要等待其结果。
关于javascript - 如何在 Node js 中循环异步发送批量邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44048327/