Skip to content

Commit

Permalink
HEARTH-133: added nodemailer as a transport layer
Browse files Browse the repository at this point in the history
  • Loading branch information
nthfloor committed Oct 24, 2017
1 parent ab9c822 commit 7438ba0
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 0 deletions.
9 changes: 9 additions & 0 deletions config/development.config.js
Expand Up @@ -18,6 +18,15 @@ var config = {
mandrill: {
token: 'fake-mandrill-api-token'
},
nodemailer: {
host: 'a-fake-email-server',
port: 587,
secure: false,
auth: {
user: 'test-user-account',
pass: 'test-passowrd'
}
},
twilio : {
accountSid: 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
authToken: 'fake-twilio-auth-token'
Expand Down
9 changes: 9 additions & 0 deletions config/production.config.js
Expand Up @@ -18,6 +18,15 @@ var config = {
mandrill: {
token: process.env.MANDRILL_TOKEN
},
nodemailer: {
host: process.env.NODEMAILER_HOST,
port: process.env.NODEMAILER_PORT,
secure: process.env.NODEMAILER_SECURE, // true for 465, false for other ports
auth: {
user: process.env.NODEMAILER_USER,
pass: process.env.NODEMAILER_PASS
}
},
twilio : {
accountSid: process.env.TWILIO_ACCOUNT_SID,
authToken: process.env.TWILIO_ACCOUNT_TOKEN
Expand Down
9 changes: 9 additions & 0 deletions config/staging.config.js
Expand Up @@ -18,6 +18,15 @@ var config = {
mandrill: {
token: process.env.MANDRILL_TOKEN
},
nodemailer: {
host: process.env.NODEMAILER_HOST,
port: process.env.NODEMAILER_PORT,
secure: process.env.NODEMAILER_SECURE,
auth: {
user: process.env.NODEMAILER_USER,
pass: process.env.NODEMAILER_PASS
}
},
twilio : {
accountSid: process.env.TWILIO_ACCOUNT_SID,
authToken: process.env.TWILIO_ACCOUNT_TOKEN
Expand Down
9 changes: 9 additions & 0 deletions config/test.config.js
Expand Up @@ -18,6 +18,15 @@ var config = {
mandrill: {
token: 'fake-mandrill-api-token'
},
nodemailer: {
host: 'a-fake-email-server',
port: 587,
secure: false,
auth: {
user: 'test-user-account',
pass: 'test-passowrd'
}
},
twilio : {
accountSid: 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
authToken: 'fake-twilio-auth-token'
Expand Down
38 changes: 38 additions & 0 deletions example/server.js
@@ -1,5 +1,6 @@
var notifier = require('../source/notifier');

// Using mandrill
notifier
.receive('user-registered', function (e, actions, callback) {
actions.create('send-welcome-email', {user: e.user}, callback);
Expand Down Expand Up @@ -33,6 +34,41 @@ notifier
}, callback);
});

// Using nodemailer
notifier
.receive('user-registered', function (e, actions, callback) {
actions.create('send-welcome-email', {user: e.user}, callback);
})
.resolve('send-welcome-email', function (a, actions, callback) {
// skip to execute
actions.resolved(a, {email: a.user.email, name: a.user.name}, callback);
})
.execute('send-welcome-email', function (a, transport, callback) {
var user = a.data;

var mailOpts = {
from: 'test@user.com',
to: 'example@likeastore.com',
subject: 'Test Email',
text: 'An example of a message.',
html: '<h1>Hello</h1> </br> Welcome!'
}

transport.nodemailer.sendMail(mailOpts, (error, info) => {
if(error){
console.log(error);
return callback(error);
}

console.log('Message sent: ' + JSON.stringify(info));
// Preview only available when sending through an Ethereal account
console.log('Preview URL: ' + nodemailer.getTestMessageUrl(info));

callback();
});
});

// Using twilio
notifier
.receive('user-registered', function (e, actions, callback) {
actions.create('send-verify-sms', {user: e.user}, callback);
Expand All @@ -54,6 +90,7 @@ notifier
}, callback);
});

// Using android push
notifier
.receive('user-completed-action', function (e, actions, callback) {
actions.create('send-android-push', {user: e.user}, callback);
Expand Down Expand Up @@ -115,6 +152,7 @@ notifier
});
});

// Using iOS push
notifier
.receive('user-completed-action', function (e, actions, callback) {
actions.create('send-ios-push', {user: e.user}, callback);
Expand Down
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Expand Up @@ -41,6 +41,7 @@
"node-gcm": "^0.14.9",
"node-logentries": "~0.1.4",
"node-mandrill": "^1.0.1",
"nodemailer": "^4.3.0",
"postal": "~2.0.5",
"request": "~2.83.0",
"respawn": "~2.5.0",
Expand Down
1 change: 1 addition & 0 deletions source/execute.js
Expand Up @@ -43,6 +43,7 @@ function error(callback) {

function execute(actionName, fn) {
if (!fn) {
logger.error('missing execute handler');
throw new Error('missing execute handler');
}

Expand Down
26 changes: 26 additions & 0 deletions source/transport.js
@@ -1,4 +1,5 @@
var mandrill = require('node-mandrill');
var nodemailer = require('nodemailer');
var twilio = require('twilio');
var gcm = require('node-gcm');
var apn = require('apn');
Expand All @@ -19,6 +20,30 @@ var setupMandrill = function () {
}
};

var setupNodeMailer = function () {
if(!validConfig()) {
var errorMsg = 'missing mailer config, please update config.transport.nodemailer section';
logger.error(errorMsg);
throw new Error(errorMsg);
}

let transporter = nodemailer.createTransport({
host: config.transport.nodemailer.host,
port: config.transport.nodemailer.port,
secure: config.transport.nodemailer.secure, // true for 465, false for other ports
auth: {
user: config.transport.nodemailer.auth.user,
pass: config.transport.nodemailer.auth.pass
}
});

return transporter;

function validConfig() {
return config.transport.nodemailer && (config.transport.nodemailer.host && config.transport.nodemailer.port && config.transport.nodemailer.auth)
}
};

var setupTwilio = function () {
if (!validConfig()) {
var errorMsg = 'missing twilio account SID or auth Token, please update config.transport.twilio section';
Expand Down Expand Up @@ -162,6 +187,7 @@ var setupIOSPushNotification = function () {

var transport = {
mandrill: setupMandrill(),
nodemailer: setupNodeMailer(),
twilio: setupTwilio(),
android: setupAndroidPushNotification(),
ios: setupIOSPushNotification()
Expand Down

0 comments on commit 7438ba0

Please sign in to comment.