Javascript 如何配置express Handlebar以将其与NodeEmailer链接?
我有一个API,它通过nodeEmailer发送电子邮件。我希望将电子邮件呈现为HTMLs,因此我尝试将NodeEmailer express Handlebar连接到我的api:Javascript 如何配置express Handlebar以将其与NodeEmailer链接?,javascript,node.js,html-email,nodemailer,express-handlebars,Javascript,Node.js,Html Email,Nodemailer,Express Handlebars,我有一个API,它通过nodeEmailer发送电子邮件。我希望将电子邮件呈现为HTMLs,因此我尝试将NodeEmailer express Handlebar连接到我的api: const nodemailer = require('nodemailer') const hbs = require('nodemailer-express-handlebars) const sendMail = async (options) => { try { const
const nodemailer = require('nodemailer')
const hbs = require('nodemailer-express-handlebars)
const sendMail = async (options) => {
try {
const transporter = nodemailer.createTransport({
host: process.env.EMAIL_HOST,
port: process.env.EMAIL_PORT,
auth: {
user: process.env.EMAIL_USER,
pass: process.env.EMAIL_PASS,
},
})
transporter.use(
'compile',
hbs({
viewEngine: {
extName: '.hbs',
partialsDir: './views/',
layoutsDir: './views/layouts',
defaultLayout: '',
},
extName: '.hbs',
viewPath: 'views',
})
)
const mailOptions = {
from: 'abc@abc.com',
// to: 'cde@cde.com',
to: options.email,
bcc: 'me@me.com',
subject: 'Booking confirmation',
template: 'emailHtml',
}
await transporter.sendMail(mailOptions)
} catch (err) {
return new AppError(
'There was an error while sending the email. Please, try again later.',
500
)
}
}
下面是该api的文件结构(api本身位于email.js中,util文件夹位于根目录中):
在main.hbs中只有标准的html5标记,其主体中有{{{body}}},在emailHtml.hbs中,h1标记中只有hello world
但是,它不起作用(我认为问题可能出在错误的路径上,但我尝试了很多组合)。我知道有一种方法可以使用样式和变量指定html:hello world
,但这对我来说不是一个合适的解决方案,所以模块化的解决方案对我来说非常有用。当我删除hbs配置并在mailOptions中放入纯文本时,电子邮件已经发送,但一旦放入模板,它就会停止工作。Dotenv已经配置好了,我只是没有把它放在这里
有什么想法吗?您是否尝试过将把手模板编译成字符串并手动附加到电子邮件正文,而不使用transporter编译选项?也许值得一试,看看这是否有效。此外,如果可能,请检查您的把手模板是否存在语法错误。请重复相同的操作