@speakr/speakr-module-services
Version:
SPEAKR Shared Service Module
255 lines (243 loc) • 9.58 kB
JavaScript
;
const mandrill = require('mandrill-api/mandrill');
const db = require('../db/');
// set MailChimp API key here
if(process.env.NODE_ENV == 'production') {
var mandrill_client = new mandrill.Mandrill('aHNaQp4yZHtZQLG4oswMXw');
} else {
var mandrill_client = new mandrill.Mandrill(); //new mandrill.Mandrill('aHNaQp4yZHtZQLG4oswMXw');
}
module.exports = {
send,
sendResetPassword,
sendPasswordChanged
};
function sendPasswordChanged(options) {
let message = {
'html': '<h1>Your password has been changed.</h1>',
'text': 'Hello,\n\n' +
'This is a confirmation that the password for your account has just been changed.\n',
'subject': 'Speakr Password Changed.',
'from_email': 'influencers@speakr.com',
'from_name': 'Speakr Admin',
'to': [{
'email': options.users.email,
'name': options.users.email,
'type': 'to'
}],
'headers': {
'replyTo': 'idteam@speakr.com'
},
'merge': true,
'merge_language': 'handlebars',
'global_merge_vars': [
{'name': 'username', 'content': options.users.email }
]
};
mandrill_client.messages.sendTemplate({
'template_name':'password-reset-letter',
'template_content': [],
'message': message,
'async': false,
'ip_pool': 'Main Pool',
'send_at': null}, result => {
return Promise.resolve(options);
});
}
function sendResetPassword(options) {
let domain = null;
if (process.env.NODE_ENV == 'local') {
domain = 'localhost:3333';
} else if (process.env.NODE_ENV == 'production') {
domain = 'app.speakr.com';
} else {
domain = 'dev.jptr.io';
}
let link = `http://${domain}/reset-password/${options.token}`;
return new Promise((resolve, reject) => {
let message = {
'html': '<h1>Somebody requested a password reset.</h1>',
'text': 'You are receiving this because you (or someone else) have requested the reset of the password for your account.\n\n' +
'Please click on the following link, or paste this into your browser to complete the process:\n\n' +
link +
'If you did not request this, please ignore this email and your password will remain unchanged.\n',
'subject': 'Speakr Password Reset',
'from_email': 'influencers@speakr.com',
'from_name': 'Speakr Admin',
'to': [{
'email': options.users.email,
'name': options.users.email,
'type': 'to'
}],
'headers': {
'Reply-To': 'idteam@speakr.com'
},
'merge': true,
'merge_language': 'handlebars',
'global_merge_vars': [
{'name': 'username', 'content': options.users.email},
{'name': 'link', 'content': link}
]
};
mandrill_client.messages.sendTemplate({
'template_name': 'forgot-password-letter',
'template_content': [],
'message': message,
'async': false,
'ip_pool': 'Main Pool',
'send_at': null
}, result => {
return resolve(options);
});
});
}
function send(email, invite){
let mailer = email;
let message = {
'html': mailer.html || '<h1>Speakr</h1>',
'text': mailer.text || 'Email text content originating from the SPEAKR-MODULE-SERVICES/UTILS/MAILER.JS',
'subject': mailer.subject || 'DEVELOPMENT TEST',
'from_email': mailer.from_email || 'devs+app@speakr.com',
'from_name': mailer.from_name || 'Speakr Development Enviroment',
'to': [{
'email': mailer.to.email || 'devs+app@speakr.com',
'name': mailer.to.name || 'Speakr Developer Dev ENV',
'type': 'to'
}],
'headers': {
'Reply-To': mailer.headers.replyTo || 'idteam@speakr.com'
},
'important': mailer.important || false,
'track_opens': mailer.track_opens || null,
'track_clicks': mailer.to.track_clicks || null,
'auto_text': mailer.to.auto_text || null,
'auto_html': mailer.to.auto_html || null,
'inline_css': mailer.to.inline_css || null,
'url_strip_qs': mailer.to.url_strip_qs || null,
'preserve_recipients': mailer.to.preserve_recipients || null,
'view_content_link': mailer.to.view_content_link || null,
'bcc_address': mailer.to.bcc_address || null,
'tracking_domain': mailer.to.tracking_domain || null,
'signing_domain': mailer.to.signing_domain || null,
'return_path_domain': mailer.to.return_path_domain || null,
'merge': mailer.merge || true,
'merge_language': mailer.merge_language || 'mailchimp',
'global_merge_vars': mailer.global_merge_vars
};
let now = new Date();
let now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds());
let async = false;
let ip_pool = 'Main Pool';
let send_at = email.send_at;
// Creates row for email in mandrill table
if(invite){
db.mandrill.create({
type: 'invite',
type_id: invite.id,
status: 'unsent'
})
.then((mandrill) => {
console.log('SEND >>>>>>>>>> ', now_utc);
mandrill_client.messages.sendTemplate({
'template_name': mailer.template_name,
'template_content': mailer.template_content,
'message': message,
'async': async,
'ip_pool': ip_pool,
'send_at': send_at}, result => {
return db.mandrill.update(
{
status: result[0].status,
},
{
where: { id: mandrill.id }
}
)
.then(accounts => {
if (!!accounts) {
if(result[0].status === 'invalid' || result[0].status === 'rejected'){
// SEND ANOTHER EMAIL ON FAILED EMAILS
console.log('\n\n EMAIL FAILED FOR ', result[0].email);
let failMessage = {
'html': '<h1>Speakr</h1>',
'text': 'INVITE EMAILS FAILED TO SEND',
'subject': 'INVITE EMAIL FAILED FOR ' + result[0].email,
'from_email': 'devs@speakr.com',
'from_name': 'Speakr Devs',
'to': [{
'email': 'devs@speakr.com',
'name': 'MANDRIL EMAIL FAILED',
'type': 'to'
}],
'headers': {
'Reply-To':'devs@speakr.com'
},
'important': false,
'track_opens': null,
'track_clicks': null,
'auto_text': null,
'auto_html': null,
'inline_css': null,
'url_strip_qs': null,
'preserve_recipients': null,
'view_content_link': null,
'bcc_address': null,
'tracking_domain': null,
'signing_domain': null,
'return_path_domain': null,
'merge': true,
'merge_language': 'mailchimp'
};
mandrill_client.messages.sendTemplate({
'template_name': 'Failed Template',
'template_content': [],
'message': failMessage,
'async': false,
'ip_pool': 'Main Pool',
'send_at': null}, result => {
console.log('\n\n SENT FAILED EMAIL REPORT TO: ', result[0].email);
return Promise.reject(result);
}, function(e) {
// Mandrill returns the error as an object with name and message keys
console.log('\n\n FAILED EMAIL DID NOT SEND' + e.name + ' - ' + e.message);
return Promise.reject(e);
//return Promise.reject(e);
// A mandrill error occurred: Unknown_Subaccount - No subaccount exists with the id 'customer-123'
});
}
return Promise.resolve();
} else {
return Promise.reject('NO MANDRILL ACCOUNT IS FOUND');
}
})
.catch((err)=>{
return Promise.reject('Unable to find row in mandrill for: ', invite.id);
})
}, function(e) {
// Mandrill returns the error as an object with name and message keys
console.log('A mandrill error occurred: ' + e.name + ' - ' + e.message);
return Promise.reject(e);
// A mandrill error occurred: Unknown_Subaccount - No subaccount exists with the id 'customer-123'
});
return Promise.resolve();
})
.catch(err => {
return Promise.reject('Unable to create row on mandrill table for: ', invite.id);
})
} else {
mandrill_client.messages.sendTemplate({
'template_name': mailer.template_name,
'template_content': mailer.template_content,
'message': message,
'async': async,
'ip_pool': ip_pool,
'send_at': send_at}, result => {
return Promise.resolve();
}, function(e) {
// Mandrill returns the error as an object with name and message keys
console.log('A mandrill error occurred: ' + e.name + ' - ' + e.message);
return Promise.reject(e);
// A mandrill error occurred: Unknown_Subaccount - No subaccount exists with the id 'customer-123'
});
}
}