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

时间:2017-10-06 17:45:59

标签: meteor exim

我使用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返回错误,即一个SMTP连接中有超过10封电子邮件,并且邮件将移至队列以在30分钟后发送。即使每封邮件延迟2.5分钟,也会发生这种情况。

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

1 个答案:

答案 0 :(得分:2)

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

默认情况下,Email sets pool=true表示传输选项。这意味着 它会重复使用已打开的连接,直到发送的邮件数量达到其限制,而nodemailer default pool options have maxMessages=100

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

  1. 10作为maxMessages传递nodemailer

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

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

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

  3. 有用的链接nodemailer文档:Pooled SMTP