我在这里碰到了砖墙。我一直在尝试从网上找到的教程改编此代码。它大多数都能工作,但是,似乎不想发送电子邮件。该代码旨在通过使用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 });
});
};