vue-express-mongo-boilerplate
Version:
Express NodeJS application server boilerplate with Mongo and VueJS
78 lines (66 loc) • 1.94 kB
JavaScript
;
let logger = require("../core/logger");
let config = require("../config");
let C = require("../core/constants");
let nodemailer = require("nodemailer");
let htmlToText = require("nodemailer-html-to-text").htmlToText;
module.exports = {
settings: {
name: "mailer",
internal: true
},
methods: {
send(recipients, subject, body) {
return new Promise((resolve, reject) => {
/*let recipients = ctx.params.recipients;
let subject = ctx.params.subject;
let body = ctx.params.body;*/
logger.info(`Sending email to ${recipients} with subject ${subject}...`);
let mailOptions = {
from: config.mailer.from,
to: recipients,
subject: subject,
html: body
};
let transporter;
if (config.mailer.transport == "smtp") {
transporter = nodemailer.createTransport(config.mailer.smtp);
}
else if (config.mailer.transport == "mailgun") {
let mg = require("nodemailer-mailgun-transport");
transporter = nodemailer.createTransport(mg({
auth: {
api_key: config.mailer.mailgun.apiKey,
domain: config.mailer.mailgun.domain
}
}));
}
else if (config.mailer.transport == "sendgrid") {
let sgTransport = require("nodemailer-sendgrid-transport");
transporter = nodemailer.createTransport(sgTransport({
auth: {
api_key: config.mailer.sendgrid.apiKey
}
}));
}
if (transporter) {
transporter.use("compile", htmlToText());
transporter.sendMail(mailOptions, (err, info) => {
if (err) {
logger.warn("Unable to send email: ", err);
reject(err);
} else {
logger.info("Email message sent.", info.response);
resolve(info);
}
});
}
else
reject(new Error("Unable to send email! Invalid mailer transport: " + config.mailer.transport));
});
}
},
init(ctx) {
// Fired when start the service
}
};