2013-08-05 7 views
1

nodemailer를 작동시키는 방법을 알아낼 수 없으며 gmail에 대한 내 자격 증명을 삽입하고 나에게 이메일을 보내려고했지만 나에게 아무 것도 보내지 않았고 잘못하지 않았으므로 혼란 스럽습니다.nodemailer는 어떻게 작동합니까?

exports.forgotPasswordPost = function(req, res, next) { 
    console.log("Forgot Password Post"); 
    if(req.body.email === '') { 
     console.log('err'); 
    } else { 
    crypto.randomBytes(48, function(ex, buf) { 
     var userToken = buf.toString('hex'); 
     console.log(userToken); 
     User.findOne({email: (req.body.email)}, function(err, usr) { 
      if(err || !usr) { 
       res.send('That email does not exist.');    
      } else { 
       console.log(usr); 
       //just call the usr found and set one of the fields to what you want it to be then save it and it will update accordingly 
       usr.token = userToken; 
       usr.tokenCreated = new Date(); 
       usr.save(function(err, usr){ 
       // res.redirect('login', {title: 'Weblio', message: 'Your token was sent by email. Please enter it on the form below.'}); 
        console.log(usr); 
       }); 

       console.log(usr); 
       var resetUrl = req.protocol + '://' + req.host + '/password_reset/' + usr.token; 
       console.log(resetUrl); 
       var locals = { 
       resetUrl: resetUrl, 
       }; 
       console.log(locals); 
       mailer.sendOne('password_reset', locals, function(err, email) { 
        console.log('email sent'); 
        res.redirect('successPost'); 
       }); 
      } 




     }); 
    }); 
    } 
}; 

내가해야합니까 : 여기

var nodemailer = require('nodemailer'); 
var config = require('./config/config'); 

var smtpTransport = nodemailer.createTransport("SMTP",{ 
    service: "Gmail", 
    auth: { 
     user: config.mailer.auth.user, 
     pass: config.mailer.auth.pass 
    } 
}); 

var EmailAddressRequiredError = new Error('email address required'); 


exports.sendOne = function(templateName, locals, fn) { 
    if(!locals.email) { 
     return fn(EmailAddressRequiredError); 
    } 

    if(!locals.subject) { 
     return fn(EmailAddressRequiredError); 
    } 

    // template 
    var transport = smtpTransport; 
    transport.sendMail({ 
     from: config.mailer.defaultFromAddress, 
     to: locals.email, 
     subject: locals.subject, 
     html: html, 
     text: text 
    }, function (err, responseStatus) { 
     if(err) { 
      return fn(err); 
     } 
     return fn(null, responseStatus.message, html, text); 
    }); 

}; 

이메일을 보내는 경로 파일입니다 : 여기

이메일 파일입니다 ... 난 내 코드에서 물건을 잃었 가능성이있다 내가 여기있는 것 옆에 뭐가 있니?

+0

당신이 작은 재현 예를 들어이를 분해 할 수 있습니까? 그리고 패킷 스니퍼를 사용하여 응용 프로그램이 메시지를 보내려고 시도하는지 확인하십시오. – Brad

+0

사용자의 토큰을 포함하는 재설정 된 비밀번호 링크를 사용자에게 보내려고합니다. 이해가 되나요? 패킷 스니퍼에 대해 들어 본 적이 없으니, 링크가 있습니까? – Lion789

+0

내가 말하는 것은 당신의 루트가 무엇인지, 사용자 토큰, 데이터베이스 액세스 등이 문제가되지 않는다는 것입니다. 문제를 nodemailer로 좁히는 간단한 재현 가능한 예제를 만드십시오. 또한 Wireshark를 확인하십시오. http://www.wireshark.org/download.html – Brad

답변

-1

Gmail이 아니라 Gmail 서버를 가리켜 야한다고 생각합니다. 나는 정확하게 그것이 gmail.smtp와 같은 것을 잊는다

+0

나머지는 제대로 보이나요? https://github.com/andris9/Nodemailer 그렇지 않은 경우 – Lion789

1

나는 노동 조합 지부를 정확하게 식별하지 않았다.

이 나를 위해 일한 코드입니다 :

var nodemailer = require('nodemailer'); 
var config = require('./config/config'); 

var smtpTransport = nodemailer.createTransport("SMTP",{ 
    // host: "smtp.gmail.com", 
    // secureConnection: true, 
    // port: 465, 
    service: "Gmail", 
    //debug : true, 
    auth: { 
     user: config.mailer.auth.user, 
     pass: config.mailer.auth.pass 
    } 


}); 

var EmailAddressRequiredError = new Error('email address required'); 


exports.sendOne = function(template, locals, err) { 
    var message = { 
     from: config.mailer.defaultFromAddress, 
     to: locals.email, 
     subject: locals.subject, 
     html: locals.html, 
     text: locals.text 
    }; 
    console.log('hitlocal email'); 
    console.log(message); 
    //console.log(message.to.locals.email); 
    if(!locals.email) { 
    // console.log('email err'); 
    } 

    if(!locals.subject) { 
     console.log('subj err'); 
    } 

    // template 
    var transport = smtpTransport; 
    // console.log('hit here'); 
    // console.log(transport); 
    transport.sendMail(message, function(err) { 
     if(err) { 
      console.log('email js error'); 
      console.log(err); 
     } 
     console.log('Message sent') 

     //return fn(null, responseStatus.message, html, text); 
    }); 

}; 

는 그리고 이것은 루트 파일입니다

var locals = { 
        email: 'first last <' + req.body.email + '>', 
        subject: 'Password Reset', 
        html: '<p> Please go to the following link to reset your password.' + resetUrl + '</p>', 
        text: 'Texty Text it' 
       }; 
       console.log('locals spot here'); 
       console.log(locals.email); 
       mailer.sendOne('forgotPassword', locals, function(err) { 

        console.log('email sent'); 

       });