Awesome
horseshoe
horseshoe
is a mailer module for node.js. It provides a
wrapper around nodemailer used for
sending email using handlebars templates.
horseshoe
is designed for a very specific use case. We use it at ENOISE to
send out system emails using SMTP and Amazon SES. This emails are predesigned
using handlebars
templates and then rendered and sent using this module.
horseshoe
renders templates using the data
specified in the message
object:
var message = {
to: 'someone@somewhere.com',
template: 'users-signup',
data: { user: { firstname: 'Lupo' } }
};
horseshoe
will search the templates path for files with either a .txt
or
.html
extension (users-signup.txt
and users-signup.html
in this case) and
render them using handlebars
to create the email body.
horseshoe
exports a single function. You invoke this function to get a
mailer
object that you can the use to send a message with mailer.send()
.
horseshoe
will retry to send individual emails if they fail (up to 3 times).
Usage
Let's assume that your script is myscript.js
and you have a directory called
mail_templates
in the same location containing a template called
users-signup.txt
(relative to script: mail_templates/users-signup.txt
).
In myscript.js
:
var horseshoe = require('horseshoe');
var mailer = horseshoe('Sendmail', { tmplPath: __dirname + '/mail_templates/' });
var message = {
to: 'someone@somewhere.com',
template: 'users-signup',
data: { user: { firstname: 'Lupo' } }
};
mailer.send(message, function (error, response) {
if (error) {
// handle error
}
});
The mail_templates/users-signup.txt
template:
This is a test subject
Hey {{user.firstname}},
I hope you like my test email...
Bye!
Supported transports
horseshoe
passes its options to nodemailer
and so you can use all transports
supported by nodemailer
.
For more info see nodemailer's README.
Sendmail example
var mailer = require('horseshoe')('Sendmail', {
path: "/usr/local/bin/sendmail",
args: ["-f foo@blurdybloop.com"]
});
SMTP
var mailer = require('horseshoe')('SMTP', {
sender: 'Someone <someone@somewhere.com>',
host: 'mail.somewhere.com',
port: 587,
auth: {
user: 'someone@somewhere.com',
pass: 'somepassowrd'
}
});
Amazon SES
var mailer = require('horseshoe')('SES', {
AWSAccessKeyID: "YOUR-AMAZON-SES-KEY",
AWSSecretKey: "YOUR-AMAZON-SES-SECRET"
});
Postmark
Note that you need to enable SMTP on https://postmarkapp.com/ and then use our API key both as username and password.
More info here: http://developer.postmarkapp.com/developer-smtp.html
var mailer = require('horseshoe')('SMTP', {
service: 'Postmark',
auth: {
user: "YOUR-POSTMARK-API-KEY",
pass: "YOUR-POSTMARK-API-KEY"
}
});