node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



Build Status Coverage Status

A mustache-template-backed mailer. Built with handlebars, and nodemailer, inspired by ActionMailer.


  1. create a templates directory with the following naming convention:
  • foo.text.hbs, for text email templates.
  • foo.meta.hbs, meta information in JSON format, e.g., subject.
  • foo.html.hbs, for html email templates.
  1. instantiate MustacheMailer with:
  • transport: the transport module you wish to use, e.g., SES.
  • templateDir: the path to the template directory.
var mm = new MustacheMailer({
  transport: require('nodemailer-ses-transport')({
      accessKeyId: 'AWSACCESSKEY',
      secretAccessKey: 'AWS/Secret/key'
  templateDir: './mail-templates'
  1. use the MessageMailer instance to grab a template:
  • if it sees an html template and a text template, both will be sent.
  • any variable passed to sendMail are sent to nodemailer, and to the mustache templates.
var msg = mm.message('confirmation', function(err, msg) {
    to: '',
    name: 'Ben',
    id: 'adfasdfadsfasdf'

tokenFacilitator Plugin

It often arises that you'd like to toss a token inside an email, e.g., click this confirmation link to change your password.

For generating these tokens, MustacheMailer allows you to install a tokenFacilitator plugin:

When instantiating MustacheMailer:

var mm = new MustacheMailer({
  transport: mock,
  templateDir: path.resolve(__dirname, './fixtures'),
  // a fake token facilitator.
  tokenFacilitator: {
    generate: function(data, cb) {
      setTimeout(function() {'');'Zeke');
        return cb(null, parseInt(Math.random() * 256));
      }, 20);

In the template{{{tokenHelper name=name email=email}}}
  • the arguments will be stored as key, value pairs in data.