我正在尝试使用 sendgrid、[电子邮件受保护]、nodemailer-handlebars1 和 expess-handlerbar@6 发送样式电子邮件
涉及sendemail的文件夹结构
发送邮件功能
const nodemailer = require("nodemailer");
const logger = require("./logger");
const handlebars = require("nodemailer-handlebars");
const path = require("path");
const viewpath = path.join(__dirname, "../views");
const sendEmail = (options) => {
// the transporter that will send the mail
const transporter = nodemailer.createTransport({
service : process.env.EMAIL_SERVICE,
auth: {
user: process.env.EMAIL_USERNAME,
pass: process.env.EMAIL_PASSWORD
}
})
// for using express handlebars
transporter.use("compile", handlebars({
viewEngine: "express-handlebars",
viewPath: `${viewpath}`
}))
console.log(viewpath)
// mail options
const mailOptions = {
from: process.env.EMAIL_FROM,
to: options.to,
subject: options.subject,
// html: options.html,
text: options.text,
template: "index"
}
transporter.sendMail(mailOptions, (error, info) => {
if(error){
logger.error(`Send Mail Error : ${error}`)
} else {
logger.info(`Email sent successfully`)
}
})
}
module.exports = sendEmail
发送电子邮件时,我收到此错误
当我将视图路径变量更改为
const viewpath = path.join(__dirname, "../views/index.handlebars");
我明白了
如果我取消注释 mailoptions 和注释文本中的 html,并在调用 sendEmail() 的地方重新调整参数 {html} ,则电子邮件发送成功。可能是什么问题呢?最好的做法是什么?
问题是,对于
viewEngine
设置,您应该传递将进入渲染引擎的选项,而不仅仅是它的名称。目前,渲染引擎正在为您的电子邮件寻找布局,但看起来您没有使用布局,所以请尝试:
const viewpath = path.join(__dirname, "../views");
transporter.use(
"compile",
handlebars({
viewEngine: {
defaultLayout: false,
},
viewPath: viewpath,
})
);