Hapi.js plugin that exposes the SendGrid-nodejs library for sending emails through SendGrid.
npm install hapi-sendgrid --save
First, the SendGrid-nodejs
requires authentication via either username/password OR an API key. When registering your plugin with Hapi, you must specify only one of the two. The accepted parameters are:
username
andpassword
apiKey
Here's a simple example:
server.register({
register: require('hapi-sendgrid'),
options: {
apiKey: 'myApiKey'
}
}, function (err) {
if (err) {
console.log('Failed loading plugin');
}
});
Once registered, you can access the plugin like so:
var sendGridClient = server.plugins['hapi-sendgrid'].client;
Once you have the client, you may access all of the existing functionality of the SendGrid-nodejs library.
In addition to exposing the SendGrid-nodejs
client, the plugin also introduces the ability to set default options that can be used to avoid having to set email options, such as from:
, over and over again. Passing in an emailOptions
object to the plugin, will merge those options with any specific options you may set when sending an email. For example:
server.register({
register: require('hapi-sendgrid'),
options: {
apiKey: 'myApiKey',
emailOptions: {
from: '2pac@thug.org'
}
}
}, function (err) {
if (err) { console.log('Failed loading plugin'); }
var client = server.plugins['hapi-sendgrid'].client;
// 'to:' is specified by default options
var email = new client.sendGridClient.Email({
to: 'mase@yahoo.com',
subject: 'whatup playa',
text: 'word'
});
client.send(email).then(function(result) {
console.log('SENT!');
return done();
}).catch(function(err) {
console.error(err);
});
});
In this example, setting the from
property isn't necessary because the from
property is inherited from the default emailOptions
.
You may also change how the SendGrid-nodejs
library behaves, such as changing the endpoint, by passing any of the following options into plugin using the clientOptions
object. For example:
server.register({
register: require('hapi-sendgrid'),
options: {
apiKey: 'myApiKey',
clientOptions: {
protocol: "http",
host: "sendgrid.org",
endpoint: "/send",
port: "80"
}
}
}, function (err) {
if (err) {
console.log('Failed loading plugin');
}
});