2017-04-13 46 views
0

我需要发送很多消息。我使用外部API和请求模块:node.js按请求发送模块

email.js

var request = require('request'); 

module.exports = function(subject, email){ 
    var message = ... ; 
    var options = { 
     method: 'POST', 
     url: 'https://api.emails.net.com/api/sendmail', 
     form: { 
      smtp_account: smtp, 
      to: {}, 
      subject: subject, 
      html: message, 
      from: '[email protected]', 
      from_name: 'Myapp' 
     }, 
     headers: { 
      'Authorization': ' ... ' 
     } 
    }; 

    request(options, function (error, response) { 
     if (!error && response.statusCode === 200) return true; 
     return false; 
    }); 
}; 

而在另一个地方:

var sendEmail = require('../email'); 

... 

for(...){ 
    if(sendEmail(subject, email)){ 
     //do something 
    } 
} 

成功后,我想要做的东西,但要求任何回报。有什么方法可以检查邮件是否成功,并在需要电子邮件模块的地方做某些事情?我正在循环发送电子邮件,我必须逐一检查。

回答

1

你可以做这样的事情

var request = require('request'); 
var Promise = require('bluebird'); 

var email = function() { 
    return { 
     send: function (subject, email) { 
      var message = "test"; 
      var options = { 
       method: 'POST', 
       url: 'https://api.emails.net.com/api/sendmail', 
       form: { 
        smtp_account: "smtp", 
        to: {}, 
        subject: subject, 
        html: message, 
        from: '[email protected]', 
        from_name: 'Myapp' 
       }, 
       headers: { 
        'Authorization': "" 
       } 
      }; 
      return new Promise(function (resolve, reject) { 
       request(options, function (error, response) { 

        if (!error && response.statusCode === 200) { 
         resolve(true); 
        } else { 
         reject(err); 
        } 
       }); 
      }) 
     } 
    } 
}; 

module.exports = email(); 

然后你就可以消耗这个如下

for (var i = 0; i < 10; i++) { 
      console.log(i); 
    email 
     .send("test", "[email protected]") 
     .then(function (status) { 
      ///Do what ever u want to do 
     }) 
     .catch(function (err) { 
      console.log(err); 
     }); 

} 
+0

它的工作原理非常感谢! – mcek