Handlebars

Install:

npm install handlebars

Syntax: {{variable}}, {{#if}}, {{#each}}, {{> partial}}

Configuration and Usage

Mail.configure({
  // ...
  templates: {
    engine: 'handlebars',
    viewsPath: './views/emails',
    extension: '.hbs',
    cache: true,
  },
});

await Mail.to('user@example.com')
  .subject('Welcome!')
  .template('welcome')
  .data({ name: 'John', appName: 'My App' })
  .send();

Template file (views/emails/welcome.hbs):

<html>
<body>
    <h1>Welcome, {{name}}!</h1>
    <p>Thank you for joining {{appName}}.</p>
</body>
</html>

HandlebarsEngine Extras

MethodSignatureDescription
registerHelper()registerHelper(name: string, fn: (...args: any[]) => any): voidRegister a Handlebars helper
registerPartial()registerPartial(name: string, partial: string): voidRegister a Handlebars partial
clearCache()clearCache(): voidClear the template cache
import { HandlebarsEngine } from '@impruthvi/nodemail';

const engine = new HandlebarsEngine({ viewsPath: './views/emails' });

// Register a helper
engine.registerHelper('uppercase', (str: string) => str.toUpperCase());

// Register a partial
engine.registerPartial('header', '<header><h1>{{title}}</h1></header>');

// Use in template: {{uppercase name}} or {{> header}}