2017-10-06 8 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はエラーを返します。 1つのSMTP接続に10以上の電子メールがあり、30分後にメールがキューに移動されて送信されることを示します。これは、すべてのメールの後に2.5分の遅延があっても発生します。

メールを送信した後にサーバーとのSMTP接続を閉じる方法はありますか?メールアドレス:smtp://localhost:25

+0

あなたはmailgunを試みたことがありますか?流星の電子メールパッケージは、1つのオフと限られた使用に適していますが、あなたのユースケースでは、Mailgunが良いかもしれません。 –

+0

イントラネットを介してデータを送信するための外部サービスを実際に使用することはできません:( – jmwierzbicki

+0

この流星コードを実行するのと同じマシンにEXIMをインストールしていますか? – Styx

答えて

2

パッケージはnode4mailer(ノード4で実行するにはnodemailerへの小さな変更)に基づいています。

デフォルトでは、転送オプションとしてEmail sets pool=trueが使用されます。つまり、送信されたメッセージの量が上限に達するまで開かれた接続を再利用することを意味する ですが、nodemailerdefault pool options have maxMessages=100です。 nodemailer輸送用maxMessagesとして

  1. パス10

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

  2. 無効にプール(その意志

    このように、あなたのMAIL_URLを変更することで、あなたはあなたの問題を解決するには2つの方法がありますnodemailerはすべてのメールに対して新しい接続を開きます):

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

お役立ちリンクnodemailerドキュメント:Pooled SMTP

+0

パーフェクトな答え! – jmwierzbicki

関連する問題