2016-07-14 6 views
2

私は簡単なことをやっていますが、うまくいきません。node.js遅れてメールを送信する

私がしたいことは、30秒の遅延でメールを送信することです。

ここでは、コードです:ここで

user.forEach(function(data) { 


    var locals = { 
     fname: data.Name, 
     your_name: data.From, 

    } 

    template.render(locals, function(err, results) { 

     if (err) { 
      return console.error(err) 
     } else { 
      transporter.sendMail({ 

       to: data.Email, 
       subject: "Welcome", 
       replyTo: data.ReplyTo, 
       html: results.html, 
       text: results.text, 
      }, function(error, info) { 
       console.log("here"); 
       if (error) { 
        console.log(error); 
       } else { 
        console.log('Message sent: ' + info.response); 
       }; 

      }); 
     } 

    }); 
}); 

ユーザーから、名前など、電子メールなどの詳細情報を持つオブジェクトの配列です

各オブジェクトの配列では、送信される特定のメールの内容を持っています。

私はメールを送信し、30秒待ってから2番目のメッセージを送信して待っています。

私はsetIntervalとnpm sleepを使用しましたが、それは動作しません。それは30秒間待ってからすぐにすべてのメールを送信します。

答えて

1

syncronous forEachを非同期実装に置き換える必要があります。
オプション1。 async.js eachLimitを使用し、30秒の遅延でコールバックをコール
オプション2。あなたが好きなあなたの送信メール機能のラッパーを書くことができます:コールスタックの上限に達した場合

var emails = ['email1', 'email2' /*...*/]; 
function sendEmailAndWait(email, callback){ 
    // your stuff 
    transporter.sendMail(email, function(error, info) { 
     // handle results 
     if(!emails.length) return callback(); 
     setTimeout(function() { 
      sendEmailAndWait(emails.shift(), callback); 
     }, 30*1000) 
    }) 
} 
sendEmailAndWait(emails.shift(), function(){ /* allDone */}); 
+0

Recurrsive機能障害が発生しました。キュー内に5000個の電子メールを想像してみてください。 –

0
setTimeout(function() { 
    template.render(locals, function(err, results) { 

    if (err) { 
     return console.error(err) 
    } else { 
     transporter.sendMail({ 

      to: data.Email, 
      subject: "Welcome", 
      replyTo: data.ReplyTo, 
      html: results.html, 
      text: results.text, 
     }, function(error, info) { 
      console.log("here"); 
      if (error) { 
       console.log(error); 
      } else { 
       console.log('Message sent: ' + info.response); 
      }; 
     }); 
    } 
}); 
}, 3000); 
関連する問題