无法发送电子邮件NodeJS

时间:2020-03-10 18:28:55

标签: node.js handlebars.js nodemailer

我在这里碰到了砖墙。我一直在尝试从网上找到的教程改编此代码。它大多数都能工作,但是,似乎不想发送电子邮件。该代码旨在通过使用Mongoose搜索数据库来帮助用户重置密码,然后一旦他们通过电子邮件找到该人,它将返回用户,同时创建令牌并将其保存到数据库。一切都说完之后,它应该将链接发送给用户,只有它不会发送链接。我不确定语法是否已过时或是否有其他错误。我确实查看了Nodemailer的网站,并注意到某些格式以及Ethereal Email的某些格式已更改,而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 });
  });
};


0 个答案:

没有答案