2017-10-06 87 views
0

我發送個性化的電子郵件通知我的用戶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: "[email protected]", 
       subject: "test ", 
       html: template, 
      }); 
      }, time) 
     }) 
     }); 

這個例子發送的所有郵件,但如果有超過10條信息,然後EXIM返回錯誤在一個SMTP連接中有超過10封電子郵件,並且郵件在30分鐘後移動到隊列以發送。即使在每封郵件之後2.5分鐘的延遲也會發生。

郵件發送後有什麼辦法可以關閉與服務器的smtp連接嗎? 郵件網址是:smtp://localhost:25

+0

你試過mailgun?流星的電子郵件包適合一次性使用和有限的使用,但Mailgun可能會更適合您的使用情況。 –

+0

無法真正使用外部服務通過內部網發送數據:( – jmwierzbicki

+0

您是否在運行此Meteor代碼的同一臺機器上安裝了EXIM? – Styx

回答

2

Email包基於node4mailer(小修改爲nodemailer以在節點4上運行它)。

默認情況下,Email sets pool=true用於傳輸選項。這意味着 它將重新使用打開的連接,直到發送的郵件數量達到其限制,而nodemailerdefault pool options have maxMessages=100

因此,通過修改MAIL_URL,你有2種方式來解決問題:

  1. 10maxMessagesnodemailer運輸:

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

  2. 禁用池(將導致nodemailer爲每封電子郵件打開一個新連接):

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

有用的鏈接nodemailer文檔:Pooled SMTP

+0

完美答案! – jmwierzbicki