首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何配置express-handlebars将其与nodemailer链接?

如何配置express-handlebars将其与nodemailer链接?
EN

Stack Overflow用户
提问于 2021-01-14 02:45:02
回答 1查看 81关注 0票数 2

嗯,我有一个通过Nodemailer发送电子邮件的API。我希望将电子邮件呈现为HTML,因此我尝试将nodemailer-express-handlebar连接到我的api:

代码语言:javascript
复制
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
        )
    }
}

下面是我的应用程序接口的文件结构(应用程序接口本身在email.js中,util文件夹在根目录中):

在main.hbs中,主体中只有{ html5 }的标准主体标记,而在emailHtml.hbs中,h1标记中只有hello world。

然而,它不起作用(我认为问题可能是在错误的道路上,但我尝试了许多组合)。我知道有一种方法可以使用样式和变量来指定html:<h1> hello world </h1>,但这对我来说不是一个合适的解决方案,所以模块化的解决方案对我会很有帮助。当我删除hbs配置并将纯文本放入mailOptions中时,电子邮件已发送,但一旦我放入模板,它就停止工作。Dotenv已经配置好了,我只是没有把它放在这里。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-08 20:36:58

如果email.js和layouts文件夹在同一个文件夹中,那么下面的代码将会工作。

代码语言:javascript
复制
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: 'layouts/', 
                    layoutsDir: 'layouts/',
                    defaultLayout: 'emailHtml',
                },
                extName: '.hbs',
                viewPath: 'layouts/',
            })
        )
        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
        )
    } }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65708025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档