UNPKG

@speakr/speakr-module-services

Version:
255 lines (243 loc) • 9.58 kB
'use strict'; 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' }); } }