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

mustache-mailer

Mustache-Mailer

Build Status Coverage Status

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

Usage

  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) {
  msg.sendMail({
    to: 'bencoe@gmail.com',
    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() {
        data.email.should.eql('zeke@example.com');
        data.name.should.eql('Zeke');
        return cb(null, parseInt(Math.random() * 256));
      }, 20);
    }
  }
});

In the template

http://example.com/{{{tokenHelper name=name email=email}}}
  • the arguments will be stored as key, value pairs in data.