const path = require('path');
const fs = require('fs');
const log = require('./log').create_logger("Mailgun");
const formData = require('form-data');
const Mailgun = require('mailgun.js');
const mailgun = new Mailgun(formData);
const mg = process.env.MG_API_KEY ? mailgun.client({
username: 'api',
key: process.env.MG_API_KEY
}) : {
messages: {
create: (domain, options) => new Promise(function(resolve) {
log.v(`Email to ${options.to} not sent - no API key`, domain, options);
resolve();
})
}
};
// mg.domains.list().then(console.log).catch(console.error);
const module_exports = Object.entries({
confirmation: {
subject: 'Confirm Your Watch Together Email',
params: {
domain: process.env.DOMAIN
}
},
password_reset: {
subject: 'Reset Your Watch Together Password',
params: {
domain: process.env.DOMAIN
}
},
password_changed: {
subject: 'Watch Together Password Changed',
params: {
domain: process.env.DOMAIN
}
},
virus_detected: {
subject: 'Watch Together Virus Detected'
},
account_delete_code: {
subject: 'Watch Together Account Deletion Requested'
},
account_deleted: {
subject: 'Watch Together Account Deleted'
}
}).reduce(function(acc, [template_name, data]) {
console.log("Loading email template: ", template_name);
// Load Raw HTML string as value
const template = fs.readFileSync(
path.resolve(__dirname, 'email_templates', template_name + ".html")
).toString();
return Object.assign(acc, {
[`send_${template_name}_email`]: function(recipient, params) {
let html = template;
params = Object.assign(data.params || {}, params);
for (let [key, value] of Object.entries(params)) {
key = `[${key.toUpperCase()}]`;
html = html.split(key).join(value);
}
log.general.info(`Send ${template_name} email to ${recipient}`);
return mg.messages.create(process.env.DOMAIN, {
from: `Watch Together <noreply@${process.env.DOMAIN}>`,
to: recipient,
subject: data.subject,
html: html
}).then(log.general.info);
}
});
}, {});
module.exports = module_exports;