1

nodemailer を機能させる方法がわかりません。gmail の資格情報も挿入し、自分にメールを送信しようとしましたが、何も送信されず、エラーも発生しなかったため、混乱しています。私のコードから何かが欠けている可能性があります...

電子メールファイルは次のとおりです。

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);
    });

};

電子メールを送信するルート ファイルは次のとおりです。

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');
                });
            }




        });
    });
    }
};

ここにあるもの以外に何か必要なものはありますか?

4

2 に答える 2

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');

                });
于 2013-08-05T17:11:42.947 に答える
-1

Gmail ではなく、Gmail サーバーを指定する必要があると思います。正確には忘れましたが、gmail.smtpのようなものです

于 2013-08-05T03:44:24.890 に答える