Я не могу понять, как заставить nodemailer работать, я также добавил свои учетные данные для gmail и попробовал отправить электронное письмо самому себе, но он ничего мне не отправил, и он не ошибся, поэтому я смущен. Вполне возможно, что я пропускаю вещи из моего кода ...Как мне заставить nodemailer работать?
здесь файл по электронной почте:
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');
});
}
});
});
}
};
Нужно ли мне что-нибудь еще, кроме того, что у меня есть?
Вы можете разбить это вниз к меньшему воспроизводимый пример? И вы использовали пакетный сниффер, чтобы узнать, пытается ли ваше приложение даже отправить сообщение? – Brad
Я пытаюсь отправить ссылку на сброс пароля, которая включает в себя токен пользователя пользователю. Это имеет смысл? Никогда не слышал о пакете сниффер, у вас есть ссылка на него? – Lion789
Я говорю, что неважно, каковы ваши маршруты, токены пользователей, доступ к базе данных и т. Д. Сделайте простой воспроизводимый пример, который сужает проблему до просто nodemailer. Кроме того, ознакомьтесь с Wireshark. http://www.wireshark.org/download.html – Brad