NodeMailer,发送特定数量的电子邮件

时间:2021-05-24 07:31:29

标签: node.js nodemailer

我需要帮助使用 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 发送限制

3 个答案:

答案 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));

相关问题