代码之家  ›  专栏  ›  技术社区  ›  Rahul

错误:partials dir必须是句柄中的字符串或配置对象

  •  0
  • Rahul  · 技术社区  · 5 年前

    我发送模板电子邮件使用 nodemailer 具有 nodemailer-express-handlebars ,但每当我试图发送邮件时,我都会收到

    Error: A partials dir must be a string or config object.

    我不知道有什么问题。

    const express = require('express');
    const hbs = require('nodemailer-express-handlebars');
    const nodemailer = require('nodemailer');
    const app = express();
    
    const user_name     = 'xxxxxxxxxxx@gmail.com';
    const refresh_token = 'xxxxxxxxxxxxxxxxxxxxxxxx';
    const client_id     = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    const client_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
    const email_to = 'yyyyyyyyyyyyyyyyyy@gmail.com';
    
    let transporter = nodemailer
        .createTransport({
            service: 'Gmail',
            auth: {
                type: 'OAuth2',
                clientId: client_id,
                clientSecret: client_secret
            },
            tls:{
                rejectUnauthorized: false
            }
        });
    transporter.use('compile', hbs({
        viewPath: 'views/email',
        extName: '.hbs'
    }));
    transporter.on('token', token => {
        console.log('A new access token was generated');
        console.log('User: %s', token.user);
        console.log('Access Token: %s', token.accessToken);
        console.log('Expires: %s', new Date(token.expires));
    });
    let mailOptions = {
        from    : user_name,
        to      : email_to,
        subject : 'Hello ✔',
        text    : 'Hello world ?',
        template: 'emailt',
        context: {},
        auth : {
            user         : user_name,
            refreshToken : refresh_token,
            expires      : 1494388182480
        }
    };
    
    // send mail with defined transport object
    
    
    app.get('/', (req,res) => {
        transporter.sendMail(mailOptions).then( r => {
            res.send(r);
        }).catch(e =>{
            res.send(e);
        });
    });
    app.listen(3000 ,()=>{
        console.log('port: 3000');
    });
    

    我的目录是这样的 views>email>emailt.hbs

    0 回复  |  直到 5 年前
        1
  •  9
  •   MAhsan    5 年前

    看起来像是最近的变化,以表达车把造成了这个问题,有人张贴了一个修复在这里 https://github.com/yads/nodemailer-express-handlebars/issues/22

    或者

    我想你可以回到一个没有这个问题的版本,至少在它被修复之前是这样。

        2
  •  3
  •   Abraham    5 年前

    我设法让我的代码工作,张贴,以防它有帮助。我不得不加上 partialsDir 给我的 handlebarOptions 我以前没有这个领域:

    const handlebarOptions = {
      viewEngine: {
        extName: '.hbs',
        partialsDir: 'src/path',
        layoutsDir: 'src/path',
        defaultLayout: 'email.hbs',
      },
      viewPath: 'src/path',
      extName: '.hbs',
    };
    
    transporter.use('compile', hbs(handlebarOptions));
    

    希望这有帮助。