在一个/ post中发送两封邮件?

时间:2019-04-03 21:25:19

标签: javascript node.js nodemailer

我的问题很简单-有时其中一封邮件没有发送。我的代码:

api.post('/sendMail', (req, res) => {
   transporter.sendMail(someFunc(), (err) => { // send mail to one user
      if (err) {  
         res.status(500).send('error');
      }

      res.status(200).send('success');
   });

   transporter.sendMail(someFunc(), (err) => {  // send mail to second user
      if (err) {  
         res.status(500).send('error');
      }

      res.status(200).send('success');
   });
});

如上所述-有时其中一封邮件未发送。

问题:负责发送第二封邮件的代码是否应位于第一封邮件的回调中?还是像上面的代码中那样将它们分开是完全可以的吗?谢谢!

1 个答案:

答案 0 :(得分:3)

在许多情况下,代码可能会失败。您无法告诉Express用两个不同的状态代码回答,您必须确定一次发送哪个代码和响应。

  

负责发送第二封邮件的代码应该在第一封邮件的回调中吗?

是的,这可能是一种方法,但是有两个缺点

1)它不能很好地扩展(对于四,三,...一万封电子邮件...)

2)它不能很好地扩展性能,因为它会接连发送一封电子邮件,您可以并行发送:

为此,请发送邮件:

const sendMail = () => new Promise((resolve, reject) => {
  transporter.sendMail(someFunc(), (err) => { 
    if(err) reject(err) else resolve();
  });
});

然后就这么简单:

Promise.all([ sendMail(), sendMail() ])
 .then(() => res.status(200).send("success"));
 .catch(() => res.status(500).send("failure"));