Не могу отправить письма NodeJS - PullRequest
0 голосов
/ 10 марта 2020

Я столкнулся с кирпичной стеной здесь. Я пытался адаптировать этот код из учебника, который я нашел в Интернете. Большинство из них работает, однако, кажется, не хочет отправлять электронную почту. Код должен помочь пользователю сбросить свой пароль, используя Mon goose для поиска в базе данных, затем, как только он найдет человека по электронной почте, он вернет пользователя, одновременно создав токен и сохранив его в БД. После того, как все сказано и сделано, он должен отправить ссылку пользователю, только он не отправит ссылку. Я не уверен, что синтаксис просто устарел или у меня просто что-то не так. Я посмотрел на сайте Nodemailer и заметил, что некоторые форматирования изменились, а также в Ethereal Email, который, кажется, имеет тот же формат. Предположим, что *** правильные адреса электронной почты и пароли. Кроме того, переменная user.email была закомментирована, чтобы я мог жестко закодировать письмо в целях тестирования.

Спасибо.

var mongoose = require('mongoose'),
  jwt = require('jsonwebtoken'),
  bcrypt = require('bcrypt'),
  User = mongoose.model('User'),
  path = require('path'),
  async = require('async'),
  crypto = require('crypto'),
  _ = require('lodash'),
  hbs = require('nodemailer-express-handlebars'),
  email = process.env.MAILER_EMAIL_ID || '***-*@ethereal.email',
  pass = process.env.MAILER_PASSWORD || 'SOMEPASS',
  nodemailer = require('nodemailer');


var smtpTransport = nodemailer.createTransport({
  service: process.env.MAILER_SERVICE_PROVIDER || 'smtp.ethereal.email',
  port: 587,
  auth: {
    user: email,
    pass: pass
  },
  tls:{
    rejectUnauthorized:false,
  }
});


var handlebarsOptions = {
  viewEngine: {
    extName: '.html',
    partialsDir: './api/templates/',
    layoutsDir: './api/templates/',
    defaultLayout: 'email.html',
  },//'handlebars',
  viewPath: path.resolve('./api/templates/'),
  extName: '.html'
};

exports.forgot_password = function(req, res) {
  async.waterfall([
    function(done) {
      User.findOne({
        email: req.body.email
      }).exec(function(err, user) {
        if (user) {
          done(err, user);
        } else {
          done('User not found.');
        }
      });
    },
    function(user, done) {
      // create the random token
      crypto.randomBytes(20, function(err, buffer) {
        var token = buffer.toString('hex');
        done(err, user, token);
      });
    },
    function(user, token, done) {
      User.findByIdAndUpdate({ _id: user._id }, { reset_password_token: token, reset_password_expires: Date.now() + 86400000 }, { upsert: true, new: true }).exec(function(err, new_user) {
        done(err, token, new_user);
      });
    },
    function(token, user, done) {
      var data = {
        from: email,
        to: '************', //user.email,
        template: 'forgot-password-email',
        subject: 'Password help has arrived!',
        context: {
          url: 'http://localhost:3000/auth/reset_password?token=' + token,
          name: user.name  //.split(' ')[0]
        }

      };
console.log(data)
      smtpTransport.sendMail(data, function(err) {
        if (!err) {
          return res.json({ message: 'Kindly check your email for further instructions' });
        } else {
          return done(err);
        }
      });
    }
  ], function(err) {
    return res.status(422).json({ message: err });
  });
};


...