Repository URL to install this package:
|
Version:
3.1.0 ▾
|
import config from 'config';
import path from 'path';
import nunjucks from 'nunjucks';
import swig from 'swig';
import _ from 'lodash';
import debugModule from 'debug';
import Mailgun from 'mailgun-js';
import Mailcomposer from 'mailcomposer';
const debug = debugModule( 'touchto:sendmail' );
const basepath = process.cwd();
const env = process.env.NODE_ENV;
/* ********Templating engines config******** */
const njkconfig = {
autoescape: true,
watch: env === 'development',
noCache: env === 'development',
};
const viewpath = path.resolve( path.join( basepath, 'server', 'views' ) );
const njkenv = nunjucks.configure( viewpath, njkconfig );
const swigdefaults = {
autoescape: true,
loader: swig.loaders.fs( path.resolve( path.join( basepath, 'server', 'views' ) ) ),
cache: env === 'development' ? false : 'memory',
};
swig.setDefaults( swigdefaults );
/* ********Mailgun config******** */
let mailgun = {};
let from = '';
if ( config.has( 'mailgun.enabled' ) && config.get( 'mailgun.enabled' ) === true ) {
const mailgunConfig = {
apiKey: config.get( 'mailgun.key' ),
domain: config.get( 'mailgun.domain' ),
};
mailgun = Mailgun( mailgunConfig );
from = config.get( 'mailgun.from' );
}
/* ********Sendmail Function******** */
/* eslint-disable no-new */
const sendmail = (
user,
text,
html,
locals,
subject,
f = '',
cc = '',
bcc = ''
) => {
const rendered = {
text: '',
html: '',
};
let ext = html.split( '.' );
ext = _.last( ext );
return new Promise( ( resolve, reject ) => {
if ( !text ) return resolve( '' );
njkenv.render( text, locals, ( err, output ) => {
err ? reject( err ) : resolve( output );
} );
return undefined;
} )
.then( ( output ) => {
rendered.text = output;
} )
.catch( ( err ) => {
debug( 'Error parsing plain-text template: ', err );
} )
.then( () => {
const renderHtml = new Promise( ( resolve, reject ) => {
if ( !html ) {
resolve( '' );
} else if ( ext === 'njk' ) {
njkenv.render( html, locals, ( err, output ) => {
err ? reject( err ) : resolve( output );
} );
} else {
debug( 'No Nunjucks template found. SWIG taking over.' );
swig.renderFile( html, locals, ( err, output ) => {
err ? reject( err ) : resolve( output );
} );
}
} );
return renderHtml;
} )
.then( ( output ) => {
rendered.html = output;
} )
.then( () => {
const sendEmail = new Promise( ( resolve, reject ) => {
// List for mailgun object with all recipients
const toList = [user.get( 'mail' )];
from = f !== '' ? f : undefined;
if ( cc ) toList.push( cc );
if ( bcc ) toList.push( bcc );
const mail = Mailcomposer( {
from,
to: user.get( 'mail' ),
text: rendered.text,
html: rendered.html,
subject,
cc,
bcc,
} );
mail.build( ( err, message ) => {
if ( err ) {
reject( err );
} else {
const mailgunObject = {
to: toList,
message: message.toString( 'ascii' ),
};
mailgun.messages().sendMime( mailgunObject, ( error ) => {
if ( error ) {
reject( error );
} else {
resolve( mailgunObject.message );
}
} );
}
} );
} );
return sendEmail;
} )
.catch( ( err ) => {
debug( `Now that's an error... ${err}` );
return Promise.reject( err );
} );
};
export default sendmail;