Я использую Nodemailer для отправки электронной почты (подтверждение, подтверждение и т. Д.).У меня есть почтовый запрос на регистрацию моих пользователей, затем я отправляю им ссылку для подтверждения по электронной почте с помощью токена.
Он хорошо работает с «текстовым» письмом.Но я попытался разработать HTML-шаблон.И ссылка не работает.
Моя пользовательская модель:
//Email templating Register
let regtemplate = fs.readFileSync('views/email/regtemplate.handlebars', 'utf-8');
let compiledRegtemplate = hbs.compile(regtemplate);
// Register Form POST
router.post('/register', (req, res) => {
let errors = [];
if (errors.length > 0) {
res.render('users/register', {
errors: errors,
name: req.body.name,
email: req.body.email,
password: req.body.password,
});
} else {
User.findOne({ email: req.body.email })
.then(user => {
if (user) {
req.flash('error_msg', 'Cette adresse email est déjà enregistrée. Si c\'est la vôtre, connectez-vous.');
res.redirect('/register');
} else {
const newUser = new User({
firstName: req.body.firstName,
lastName: req.body.lastName,
email: req.body.email,
password: req.body.password
});
bcrypt.genSalt(10, (err, salt) => {
bcrypt.hash(newUser.password, salt, (err, hash) => {
if (err) throw err;
newUser.password = hash;
newUser.save()
.then(user => {
async.waterfall([
function (done) {
crypto.randomBytes(20, function (err, buf) {
var token = buf.toString('hex');
done(err, token);
});
},
function (token, done) {
user.resetPasswordToken = token;
user.save(function (err) {
done(err, token, user);
});
},
function (token, user, done) {
let transporter = nodemailer.createTransport({
host: 'mail.gandi.net',
port: 465,
secure: true,
auth: {
user: process.env.NM_USER,
pass: process.env.NM_PSW
},
tls: {
rejectUnauthorized: false
}
});
let mailOptionsReset = {
to: user.email,
from: 'contact@collectorcarvalue.com',
subject: 'Confirmez votre adresse email | Collector Car Value',
html: compiledRegtemplate({ firstName: user.firstName, confirmlink: 'http://' + req.headers.host + '/confirmation/' + token + '\n\n'})
};
transporter.sendMail(mailOptionsReset, function (err) {
req.flash('success_msg', 'Un lien de vérification a été envoyé à ' + user.email + '. Veuillez cliquez sur ce dernier s\'il vous plaît.');
res.redirect('/register');
done(err, 'done');
});
}
], function (err) {
if (err) return next(err);
});
})
.catch(err => {
console.log(err);
return;
});
});
});
}
});
}
});
И моя ссылка href написана так в файле regtemplate.handlebars:
<a style="background-color:#ffa100;border:1px solid #333333;border-color:#ffa100;border-radius:6px;border-width:1px;color:#ffffff;display:inline-block;font-family:arial,helvetica,sans-serif;font-size:16px;font-weight:bold;letter-spacing:0.3px;line-height:25px;padding:12px 25px 12px 25px;text-align:center;text-decoration:none"
href={{confirmlink}}
target="_blank">Confirmez
votre adresse email</a>
Ссылка хорошо написана в моей строке chrome url, но перенаправление на мой локальный хост не работает.