流星电子邮件:连接未关闭

Meteor email: Connection not closed

我正在使用 Meteor.methods():

向我的用户发送个性化电子邮件通知
Orders._collection.rawCollection()
      .distinct('user', { day: dayId })
      .then((result) => {
        let mailList = []
        User.find({ _id : { $in : result } }).forEach((user) => {
          mailList.push({ to: user.emails[0].address, room: user.profile.room });
        });
        console.log('setting mail queue...')
        mailList.forEach((user, index) => {
          let delay = 0;
          let time = delay + (index*200);
          console.log('queue set for user '+user.to+" for "+ time/1000 +' seconds')
          Meteor.setTimeout(() => {
            console.log('sending mail to: ' + user.to);
            Email.send({
              to: 'user.to',
              from: "test@example.pl",
              subject: "test ",
              html: template,
            });
          }, time)
        })
      });

此示例发送所有邮件,但如果超过 10 封邮件,则 EXIM returns 错误,即一个 SMTP 连接中有超过 10 封电子邮件,30 分钟后将邮件移至队列发送.即使在每封邮件后延迟 2.5 分钟,也会发生这种情况。

有没有办法在邮件发送后关闭与服务器的smtp连接? 邮件 url 是:smtp://localhost:25.

Email 包基于 node4mailer(在节点 4 上对 nodemailer 进行了 运行 的小修改)。

默认情况下,Email sets pool=true 用于传输选项。这意味着 它将重用打开的连接,直到发送的消息数量达到其限制,而 nodemailer default pool options have maxMessages=100.

因此,通过修改您的 MAIL_URL,您有 2 种方法可以解决您的问题:

  1. 10 作为 maxMessages 传递给 nodemailer 运输:

    smtp://localhost:25/?maxMessages=10

  2. 禁用池(这将导致 nodemailer 为每封电子邮件打开一个新连接):

    smtp://localhost:25/?pool=false

有用 linknodemailer 文档:Pooled SMTP