gpt4 book ai didi

javascript - 如何在 Node js 中循环异步发送批量邮件?

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:35 25 4
gpt4 key购买 nike

我想使用异步方式向用户发送多封邮件。

  • 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com