我需要帮助使用 nodemailer 发送特定数量的电子邮件,假设我想向特定人发送 20 封电子邮件。 这是我的代码。
const transporter = nodemailer.createTransport(smtpTransport({
host: "smpt.gmail.com", //smtp server
port: 587,
pool: true,
secure: false, // true for 465, false for other ports
auth: {
user: "testtest@gmail.com", // mail
pass: "testtesttest" // password
}
}));
transporter.close();
// setup email data with unicode symbols
let mailOptions = {
from: '"Test Test" <testtest@gmail.com>', // sender address
to: mailto, // list of receivers
subject: args[1], // Subject line
text: args[2] //
};
async function sendMail() {
let info = await transporter.sendMail(mailOptions);
sending = true;
}
const SendingMessage = setInterval(() => {
var mailto = args[0];
mailOptions.subject = args[1];
var mailtxt = args[2];
sendMail();
}, 1500);
如何让它只向 test@test.com 发送“嘿”之类的消息 5 次。因为目前它只发送“嘿”,直到我达到我的 smtp 发送限制
答案 0 :(得分:0)
首先创建一个你要发送的邮件内容数组,例如;
const mails2send = [
{
from: '..',
to: '..',
subject: '..'
text: '..'
},
{
from: '..',
to: '..',
subject: '..'
text: '..'
},
{
from: '..',
to: '..',
subject: '..'
text: '..'
}
]
修改 sendMail 函数以接收参数。
async function sendMail(mailOptions) {
let info = await transporter.sendMail(mailOptions);
sending = true;
return sending;
}
然后映射通过 mails2send
mails2send.forEach( item => sendMail(item ))
更新看来您可能在谈论您的 setInterval 函数
let counter = 0;
const SendingMessage = setInterval(() => {
var mailto = args[0];
mailOptions.subject = args[1];
var mailtxt = args[2];
sendMail();
if (counter === 4) {
return clearInterval(SendingMessage); //<-- clear the interval when reach 5.
}
counter++ //<-- counter increment.
}, 1500);
答案 1 :(得分:0)
嗯,也许这就是你想要的? 这将向每个地址发送 5 次邮件并阻塞/同步。
const nodemailer = require("nodemailer");
function template(address) {
return {
from: '"Fred Foo ?" <foo@example.com>', // sender address
to: address, // list of receivers
subject: "Hello ✔", // Subject line
text: "Hello world?", // plain text body
html: "<b>Hello world?</b>", // html body
};
}
async function main() {
const transport = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
auth: {
user: "augustine.kozey54@ethereal.email",
pass: "5Jq3GYxyTu51Pxx8Hr",
},
});
const addresses = [
"budi@mail.com",
"ami@mail.com",
"indah@mail.com",
"july@mail.com",
"meita@mail.com",
];
/*
Using for loop
*/
// const mailer = [];
// for (let i = 0; i < addresses.length; i++) {
// for (let j = 0; j < 5; j++) {
// mailer.push(transport.sendMail(template(addresses[i])));
// }
// }
/*
Using for map
*/
const mailer = addresses
.map((address) => {
return [...Array(5)].map((i) => transport.sendMail(template(address)));
})
.flatMap((array) => [...array]);
return await Promise.all(mailer);
}
main()
.then((res) => console.log(res))
.catch((e) => console.error(e));
答案 2 :(得分:0)
const nodemailer = require("nodemailer");
function template(address) {
return {
from: '"Fred Foo ?" <foo@example.com>', // sender address
to: address, // list of receivers
subject: "Hi", // Subject line
text: "Hi", // plain text body
// html: "<b>Hello world?</b>", // html body
};
}
async function main() {
const transport = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
auth: {
user: "augustine.kozey54@ethereal.email",
pass: "5Jq3GYxyTu51Pxx8Hr",
},
});
const addresses = [
"test@gmail.com"
];
/*
Using for loop
*/
// const mailer = [];
// for (let i = 0; i < addresses.length; i++) {
// for (let j = 0; j < 5; j++) {
// mailer.push(transport.sendMail(template(addresses[i])));
// }
// }
/*
Using for map
*/
const mailer = addresses
.map((address) => {
return [...Array(5)].map((i) => transport.sendMail(template(address)));
})
.flatMap((array) => [...array]);
return await Promise.all(mailer);
}
main()
.then((res) => console.log(res))
.catch((e) => console.error(e));