Express 车把错误:错误:ENOENT:没有这样的文件或目录,

问题描述 投票:0回答:1

我正在尝试使用 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} ,则电子邮件发送成功。可能是什么问题呢?最好的做法是什么?

express handlebars.js sendgrid nodemailer express-handlebars
1个回答
0
投票

问题是,对于

viewEngine
设置,您应该传递将进入渲染引擎的选项,而不仅仅是它的名称。目前,渲染引擎正在为您的电子邮件寻找布局,但看起来您没有使用布局,所以请尝试:

const viewpath = path.join(__dirname, "../views");

  transporter.use(
    "compile",
    handlebars({
      viewEngine: {
        defaultLayout: false,
      },
      viewPath: viewpath,
    })
  );
© www.soinside.com 2019 - 2024. All rights reserved.