通过nodemailer向多个收件人发送电子邮件

Atu*_*rma 25 javascript node.js nodemailer

我正在尝试向多个收件人发送电子邮件.为此,我创建了一个收件人数组,但是使用我的代码,我只能将邮件发送到阵列的最后一次电子邮件ID三次.我的代码出了什么问题?

var nodemailer = require("nodemailer");

var smtpTransport = nodemailer.createTransport(
"SMTP",{
  host: '',
  //  secureConnection: true,         // use SSL
  port: 25
});

var maillist = [
  '****.sharma3@****.com',
  '****.bussa@****.com',
  '****.gawri@****.com',
];

var msg = {
    from: "******", // sender address
    subject: "Hello ?", // Subject line
    text: "Hello This is an auto generated Email for testing  from node please ignore it  ?", // plaintext body
    cc: "*******"    
    //  html: "<b>Hello world ?</b>" // html body
}


maillist.forEach(function (to, i , array) {
  msg.to = to;

  smtpTransport.sendMail(msg, function (err) {
    if (err) { 
      console.log('Sending to ' + to + ' failed: ' + err);
      return;
    } else { 
      console.log('Sent to ' + to);
    }

    if (i === maillist.length - 1) { msg.transport.close(); }
  });
});
Run Code Online (Sandbox Code Playgroud)

pky*_*eck 36

nodemailer(v2.4.2)文档说:

to - 逗号分隔列表或将显示在"收件人:"字段上的收件人电子邮件地址数组

所以你可以这样做:

var maillist = [
  '****.sharma3@****.com',
  '****.bussa@****.com',
  '****.gawri@****.com',
];

var msg = {
    from: "******", // sender address
    subject: "Hello ?", // Subject line
    text: "Hello This is an auto generated Email for testing  from node please ignore it  ?", // plaintext body
    cc: "*******",
    to: maillist
}
Run Code Online (Sandbox Code Playgroud)

  • 这些是您正在寻找的机器人。 (5认同)

ack*_*ser 25

据我所知,你将能够获得这样的多个收件人

"mail1@mail.com,mail2@mail.com,mail3@mail.com,mail4@mail.com"
Run Code Online (Sandbox Code Playgroud)

所以为什么你不做那样的事情

var maillist = '****.sharma3@****.com, ****.bussa@****.com, ****.gawri@****.com';

var msg = {
    from: "******", // sender address
    to: maillist,
    subject: "Hello ?", // Subject line
    text: "Hello This is an auto generated Email for ...  ?", // plaintext body
    cc: "*******"    
    //  html: "<b>Hello world ?</b>" // html body
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过,它正在发挥作用.此外,从我的角度来看,如果你有能力只发送一次而没有任何复杂情况,你为什么要担心"异步"或发送电子邮件1K次?

无论如何希望这个帮助,回答你的问题,或者它可能有助于其他人

当然,我的答案可以改善..

  • 请记住,此方法(具有多个地址的“收件人”字段)会将所有电子邮件收件人公开给所有收件人。隐私问题。 (4认同)

een*_*agy 13

您的问题是从异步代码引用相同的msg对象.forema在sendMail发送电子邮件之前完成.

所以msg.to将成为maiilist对象的最后一项.

尝试在maillist foreach中克隆/复制msg,或者只是将msg定义移动到那里:

maillist.forEach(function (to, i , array) {


  var msg = {
        from: "******", // sender address
        subject: "Hello ?", // Subject line
        text: "Hello This is an auto generated Email for testing  from node please ignore it  ?", // plaintext body
        cc: "*******"    
        //  html: "<b>Hello world ?</b>" // html body
    }
  msg.to = to;

  smtpTransport.sendMail(msg, function (err) {
Run Code Online (Sandbox Code Playgroud)


小智 6

var maillist = [
  '****.sharma3@****.com',
  '****.bussa@****.com',
  '****.gawri@****.com',
];

maillist.toString();

var msg = {
    from: "******", // sender address
    to: maillist,
    subject: "Hello ?", // Subject line
    text: "Hello This is an auto generated Email for testing  from node please ignore it  ?", // plaintext body
    cc: "*******"    
    //  html: "<b>Hello world ?</b>" // html body
}
Run Code Online (Sandbox Code Playgroud)


Abh*_*mar 6

let info = await transporter.sendMail({
  from: [{ name: "sender Name", address: "sender@example.com" }], // sender address
  to: [
    { name: "Receiver Name 1", address: "receiver1@example.com" },
    { name: "Receiver Name 2", address: "receiver2@example.com" },
  ],
  subject: "Hey you, awesome!",
  html: "<b>This is bold text</b>",
  text: "This is text version!",
});
Run Code Online (Sandbox Code Playgroud)
  • 您可以通过保留对象数组来向多个收件人发送电子邮件,其中名称是收件人姓名,地址是收件人电子邮件地址。
  • 通过上述方式,我可以向多个收件人发送电子邮件。