2013-10-30 1 views
0
내가 nodejs는 메일의 호출 메일을 콜백

nodejs 이벤트를 만들 nodemailer

var util = require('util'); 
var event = require('events'); 
var nodemailer = require("nodemailer"); 
var smtpTransport = nodemailer.createTansport("SMTP", { 
    service: "GMAIL", 
    auth: { 
     user : "[email protected]", 
     pass : "pass" 
      } 
    }); 
mail.exports = function(from, to, subject ...){ 
    this.from = from; 
    this.to = to; 
    this.subject = subject; 
    .... 

    this.send = function(){ 
     var options = { 
      from = this.from; 
      to = this.to; 

     }; 
     var obj = this.send; 
     event.Eventemitter.call(obj); 
     smtpTransport.sendMail(options, function(err, success) { 
      if(err){ 
       obj.emit('error', err); 
      } 
      if(success){ 
       obj.emit('success', success); 
      } 
     }); 
    } 
}; 

을 사용하는 대신 보낼 때 나는 이벤트 오류 및 성공을 만들려는 일부에 내가이를 메일을 보낼 nodemail 사용

서비스

var Mail = require('./mail'); 
var mail = new Mail(); 
    mail.from = "[email protected]"; 
    mail.to = "[email protected]"; 
    ... 
    mail.send(); //the mail is send 

메일 보낼 것입니다하지만 난 FOLLO

메일 전송 여부를

mail.send() 
    .on("error", function(err){ 
     console.log("Mail not send"); 
    }) 
    .on("success", function(success){ 
     console.log("Mail send"); 
    }); 
나도 몰라 그런 다음

var util = require('util'); 
var events = require('events'); 
var nodemailer = require("nodemailer"); 
var smtpTransport = nodemailer.createTansport("SMTP", { 
    service: "GMAIL", 
    auth: { 
     user : "[email protected]", 
     pass : "pass" 
      } 
    }); 

module.exports = function(from, to, subject){ 
    this.from = from; 
    this.to = to; 
    this.subject = subject; 
    this.events = new events.EventEmitter(); 
    //.... 
    this.send = function(){ 
     var options = { 
      from : this.from, 
      to : this.to 

     }; 

     smtpTransport.sendMail(options, function(err, success) { 
      if(err){ 
       this.events.emit('error', err); 
      } 
      if(success){ 
       this.events.emit('success', success); 
      } 
     }); 
    } 
}; 

를 같이 사용 : 다음 TUTO을 결혼 http://www.sitepoint.com/nodejs-events-and-eventemitter/

+0

정확히 어디 당신이 콜백을 추가? 전자 메일을 보내기 전에 성공 및 오류 콜백이 등록되어 있는지 확인하고 싶을 것입니다. –

+0

mail.send()를 실행할 때 메일이 전송되었는지 여부를 알 수 없습니다. 그래서 나는 smtpTransport.sendMail()을 실행할 때 이벤트 에러와 성공을 추가하고 싶다. 따라서 mail.send()에서 오류 및 성공을 청취 할 때 메일이 전송되었는지 여부를 알 수 있습니다. – goten

+0

이 작업을 @goten에서 처리 할 수 ​​있었습니까? –

답변

1

이런 식으로 뭔가 작업을해야 제가 테스트하는 순간에 Gmail로 액세스 할 수없는

var Mail = require('./mail'); 
var mail = new Mail(); 
mail.from = "[email protected]"; 
mail.to = "[email protected]"; 

mail.events.on("error", function(err){ 
     console.log("Mail not send"); 
}); 
mail.events.on("success", function(success){ 
     console.log("Mail send"); 
}); 

mail.send(); 

보내기 등이 있지만 원칙적으로 작동해야합니다.

초기 예제에는 다양한 구문 문제가 있습니다.

마음에두고 싶은 것은 EventEmitter를 클라이언트 코드에 노출시켜야 콜백에 등록 할 수 있고 이메일을 보내기 전에 콜백을 등록해야한다는 것입니다.

성공 및 실패 콜백 함수를 전달하여 EventEmitter를 사용하지 않고도이 작업을 수행 할 수 있습니다. 어느 것이 더 간단해질 것입니다.

module.exports = function(params){ 
    this.from = params.from; 
    this.to = params.to; 
    this.subject = params.subject; 
    this.successCallback = params.successCallback; 
    this.errorCallback= params.errorCallback; 

    this.send = function(){ 
     var options = { 
      from : this.from, 
      to : this.to  
     }; 

     smtpTransport.sendMail(options, function(err, success) { 
      if(err){ 
       this.errorCallback(err); 
      } 
      else{ 
       this.successCallback(success); 
      } 
     }); 
    } 
}; 

호출은 다음과 같습니다

var Mail = require('./mail'); 
var mail = new Mail({ 
    from : "[email protected]", 
    to : "[email protected]", 
    subject : "subject", 
    successCallback : function(success){ 
      console.log("Mail send"); 
     }, 
    errorCallback : function(err){ 
      console.log("Mail not send"); 
     } 
}); 

mail.send(); 
+0

답장을 보내 주셔서 감사합니다. 첫 번째 질문처럼 더 많은 것을 찾고있었습니다. 하지만 두 번째는 내가하고 싶은 일에 대해 꽤 흥미 롭습니다. – goten

0
var nodemailer = require("nodemailer"); 
var smtpTransport = nodemailer.createTransport("SMTP",{ 
    service: params.data.service, 
    auth: { 
     user: params.data.user, 
     pass: params.data.pass 
    } 
}); 

/* 
* Events 
*/ 
var event = require('events').EventEmitter; 
var util = require('util'); 

/* 
* Export of the module mail 
*/ 
function Mail(from, to, cc, bcc, replyTo, subject, text, html, generateTextFromHTML, headers){ 

    this.from = from; 
    this.to = to; 
    this.cc = cc; 
    this.bcc = bcc; 
    this.replyTo = replyTo; 
    this.subject = subject; 
    this.text = text; 
    this.html = html; 
    this.generateTextFromHTML = generateTextFromHTML; 
    this.headers = headers; 

    var self = this; 
    event.call(self); 
    this.send = function() { 

     var options = { 
      from : this.from, 
      to  : this.to, 
      cc  : this.cc, 
      bcc  : this.bcc, 
      replyTo : this.replyTo, 
      subject : this.subject, 
      text : this.text, 
      html : this.html, 
      generateTextFromHTML : this.generateTextFromHTML, 
      headers : this.headers 

     }; 

     smtpTransport.sendMail(options, function(err, success){ 
      if(err){ 
       self.emit('error', err); 
      } 
      if(success){ 
       self.emit('success', success); 
      } 
     }); 

    }; 
} 

util.inherits(Mail, event); 

module.exports = Mail; 

콜링 :

var Mail = require('mail'); 
    var mail = new Mail({ 
     from : "[email protected]", 
     to : "[email protected]", 
     subject : "subject" 
     }); 
     mail.send(); 
     mail 
     .on('success', function(res){ 
      console.log(res.message); 
     }); 
관련 문제