【问题标题】:Using Nodemailer Express Handlebars with Templates使用带有模板的 Nodemailer Express Handlebars
【发布时间】:2022-10-21 10:45:53
【问题描述】:

我正在尝试使用模板功能发送电子邮件,但每次我尝试它都会返回同样的错误:

[Error: ENOENT: no such file or directory, open 'C:\Projetos\project\backend.io\main.handlebars'] {
  errno: -4058,
  code: 'ENOENT',
  syscall: 'open',
  path: 'C:\\Projetos\\project\\backend.io\\main.handlebars'
}

当我调用 store 方法时,我正在放下我的路由中使用的控制器:

class Players extends Controller {
  constructor() {
    super(Player);
    this.JWT_EXPIRE = 28000;
    this.relationships = ["permission"];
    this.fieldHidden = ['fieldHidden']
  }

  async store(req, res) {
    try {
      let body = req.body;

      if (body.password) {
        const salt = await bcrypt.genSalt(10);
        body.password = await bcrypt.hash(body.password.toString(), salt);
      }

      req.body = body;

      let player = super.store(req, res);

      Mail.sendMail({
        from: 'Email <muyemail@myhostname.com>',
        to: player.email,
        subject: 'Reset your password',
        template: 'confirm_account', //Name email file template
        context: { // pass variables to template          
          token: player.token
        }
      }, function (err, response) {
        if (err) {
          console.error(err)
        }
        console.log(response)
      });

      return player;
    } catch (error) {
      let errors = error.message.split(",\n");
      return res.json({
        status: "error",
        message: errors,
      });
    }
  }
}

这是我为管理电子邮件发送而制作的配置文件:

"use strict";
import nodemailer from 'nodemailer';
import dotenv from 'dotenv';
import mailerhbs from 'nodemailer-express-handlebars';
const path = require('path');
dotenv.config();

// create reusable transporter object using the default SMTP transport
var Mail = nodemailer.createTransport({
    host: process.env.MAIL_HOST,
    port: 465,
    secure: true, // true for 465, false for other ports
    auth: {
      user: process.env.MAIL_USERNAME,
      pass: process.env.MAIL_PASSWORD
    },
});

Mail.use('compile', mailerhbs({
    viewPath: 'src/mails/templates', //Path to email template folder
    extName: '.hbs' //extendtion of email template
}));

export default Mail;

我的结构项目图片如下:

【问题讨论】:

    标签: javascript node.js nodemailer


    【解决方案1】:

    你有没有尝试过:

    const viewPath =  path.resolve(__dirname, './mails/templates/');
    
    Mail.use('compile', mailerhbs({
        viewPath: viewPath, //Path to email template folder
        extName: '.hbs' //extendtion of email template
    }));
    

    那是为我做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-11
      • 2021-04-22
      • 2023-03-26
      • 2013-07-16
      • 2012-12-02
      • 2019-05-22
      • 2013-10-23
      • 1970-01-01
      相关资源
      最近更新 更多