A mustache-template-backed mailer. Built with handlebars, and nodemailer, inspired by ActionMailer.
- 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.
- 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'
});
- use the
MessageMailer
instance to grab a template:
- if it sees an
html
template and atext
template, both will be sent. - any variable passed to
sendMail
are sent tonodemailer
, and to the mustache templates.
var msg = mm.message('confirmation', function(err, msg) {
msg.sendMail({
to: 'bencoe@gmail.com',
name: 'Ben',
id: 'adfasdfadsfasdf'
});
}
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:
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);
}
}
});
http://example.com/{{{tokenHelper name=name email=email}}}
- the arguments will be stored as
key
,value
pairs in data.