【发布时间】:2015-08-17 10:39:00
【问题描述】:
我正在尝试使用 hogan-express 编译一个 html 电子邮件模板以在我的节点应用程序中发送。基本示例是一封欢迎电子邮件,它向新用户发送他们的登录凭据。 html 模板非常简单,只在正确的点输出数据,例如:{{username}}。我遇到的问题是我似乎无法将编译后的模板作为 html 获取以传递给 nodemailer。
根据 robertlkep 的非常有用的帖子,我已经修改了我的代码,但仍然无法使事情正常工作。我可以确认 app.js 文件中有以下内容:
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('hogan-express'));
app.set('view engine', 'html');
app.set('layout', 'layouts/default');
因此,该应用程序使用该引擎处理所有视图,并且运行得非常好(根本不喜欢 Jade)。违规路线已更改为以下内容:
var express = require('express');
var router = express.Router();
var User = require('../models/user');
var Report = require('../models/report');
var passport = require("passport");
var localStrategy = require("passport-local").Strategy;
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
router.post('/register', function(req, res, next) {
// Registration logic etc
var password = req.body.password;
var email = req.body.email;
var company = req.body.company;
var name = req.body.name;
var role = req.body.role;
req.checkBody('email','Email field is required').notEmpty();
req.checkBody('email','Email not valid').isEmail();
req.checkBody('company','Company field is required').notEmpty();
req.checkBody('name','Name field is required').notEmpty();
var errors = req.validationErrors();
if (errors) {
res.render('register',{
errors: errors,
email: email,
company: company,
name: name,
role: role
});
} else {
var newUser = new User({
email: email,
company: company,
name: name,
password: password,
role: role
});
// Create User
User.createUser(newUser, function(err,user){
if (err) throw err;
var textContent = 'You can log in at with your email address and this password: ' + password;
app.render('emails/welcome', {
layout:"layouts/email",
title: "Email Title",
message:"Main Message",
username: email,
password:password
}, function(err,html) {
if (err) throw err;
console.log(html);
var mailOptions = {
from: 'Test Email <test@test.co.uk>',
to: email,
subject:'Subject',
text: textContent,
html: html
};
var transporter = nodemailer.createTransport(smtpTransport({
host: 'smtp.host.co.uk',
port: 465,
secure:true,
auth: {
user: 'test@test.co.uk',
pass: process.env.EMAIL_PASSWORD
}
}));
transporter.sendMail(mailOptions, function(error,info) {
if (error) {
console.log(error);
req.flash('error', "Emailed failed");
res.location('/users');
res.redirect('/users');
} else {
console.log('Message sent: ' + info.response);
// Send flash message
req.flash('success', "New user created");
res.location('/users');
res.redirect('/users');
};
});
});
});
};
});
我已经从中删除了任何太具体的内容,我并没有真正从 test@test.com 发送电子邮件。无论如何,使用此代码创建了用户,但 html 不会登录到控制台,并且应用程序只是挂起。我对 Node 还是很陌生,所以我犯了什么愚蠢的新手错误?
【问题讨论】: