gbox-notification
Version:
Email temaplates and notifications
144 lines (125 loc) • 6.86 kB
JavaScript
let nodemailer = require('nodemailer');
const ejs = require('ejs');
const path = require('path');
module.exports = {
sendEmail: async function (key, emails, language, data) {
/* Generate template data by given key.
* Key is given in documentation, language of requested template,
* Data is also defined in documentation.
* Option parameter custom object from sails.
* */
let templateData = this.jsonKeys(key, language, data);
/* Render data to html with ejs plugin.
* templateData is object with all needed data for email content.
* Render use sails custom object for logged user, company details, baseUrl...
* */
let renderData = await this.renderEmail(templateData, data.apiData, language);
/* If render data fail, don't try send mail
*
* renderData is content of email.
* sails custom object needed for company information
* emails is array of email-s.
* title for email title
*
* */
if (renderData) {
this.send(renderData, data.apiData, emails, templateData.title)
}
},
renderEmail: async function (tempData, apiData, language) {
return await ejs.renderFile(path.join(__dirname, '../', 'template/content.ejs'),
{tempData: tempData, apiData: apiData, language: language})
},
send: function (html, apiData, emails, title) {
/* sails.config.emailConfig is required to be set*/
// TO DO SET CONFIG FUNCTION
let transporter = nodemailer.createTransport({
host: sails.config.emailConfig.host,
port: sails.config.emailConfig.port,
secure: true, // true for 465, false for other ports
auth: {
user: sails.config.emailConfig.user,
pass: sails.config.emailConfig.pass
},
tls: {
rejectUnauthorized: false
}
});
let mailOptions = {
from: (apiData.name) ? apiData.name + " <service@gaussbox.net>" : "service@gaussbox.net",
to: emails, // list of receivers
subject: title, // Subject line
text: '', // plain text body
html: html // html body
};
transporter.sendMail(mailOptions, function (err, info) {
if (err) console.log("Check email service", err);
});
},
jsonKeys: function (key, language, data) {
if (!data.apiData.loggedUser) data.apiData.loggedUser = {}
let keys = {
eng: {
user_create_send_password: {
title: 'Account Created',
message: `Hello <b> ${data.parent.displayName} </b>,<br>
welcome to ${data.apiData.mainCompany.name}. Please use the password below and follow this <a href="${'https://' + data.apiData.subdomain + '.' + data.apiData.frontendUrl}">link</a> for login. `,
caption: `For security reasons, please change your password in settings after login.`,
option: {password: data.option.password}
},
user_register: {
title: 'Account Created',
message: `Hello <b> ${data.parent.displayName} </b>,<br>
welcome to ${data.apiData.mainCompany.name}. Please use the password below and follow this <a href="${'https://' + data.apiData.subdomain + '.' + data.apiData.frontendUrl}">link</a> for login. `,
caption: `For security reasons, please change your password in settings after login.`,
option: {password: data.option.password}
},
reset_password: {
title: 'Reset password',
message: ` Dear user <strong> ${data.parent.displayName}</strong>,<br>
you have submitted a request for reset password. Please follow the link to complete the process <a href="${'https://' + data.apiData.subdomain + '.' + data.apiData.frontendUrl + data.option.resetUrl}">LINK</a>`,
caption: ``,
option: {}
},
company_created: {
title: 'New company created',
message: ` Dear user,<br>
New company ${data.parent.name} has been created by ${data.apiData.loggedUser.displayName}. `,
caption: ``,
option: {}
}
},
hrv: {
user_create_send_password: {
title: 'Kreiran račun',
message: `Pozdrav <strong> ${data.parent.displayName} </strong>,<br>
dobro došao u ${data.apiData.mainCompany.name}. Upotrijebite lozinku u nastavku i slijedite ovaj <a href="${'https://' + data.apiData.subdomain + '.' + data.apiData.frontendUrl}">link</a> za prijavu. `,
caption: `Iz sigurnosnih razloga promijenite zaporku u postavkama nakon prijave.`,
option: {password: data.option.password}
},
user_register: {
title: 'Kreiran račun',
message: `Pozdrav <strong> ${data.parent.displayName} </strong>,<br>
dobro došao u ${data.apiData.mainCompany.name}. Upotrijebite lozinku u nastavku i slijedite ovaj <a href="${'https://' + data.apiData.subdomain + '.' + data.apiData.frontendUrl}">link</a> za prijavu. `,
caption: `Iz sigurnosnih razloga promijenite zaporku u postavkama nakon prijave.`,
option: {password: data.option.password}
},
reset_password: {
title: 'Resetiranje lozinke',
message: ` Dragi korisniče <strong> ${data.parent.displayName}</strong>,<br>
podnijeli ste zahtjev za poništavanje zaporke. Slijedite link kako biste dovršili postupak <a href="${'https://' + data.apiData.subdomain + '.' + data.apiData.frontendUrl + data.option.resetUrl}" target="_blank">LINK</a>`,
caption: ``,
option: {}
},
company_created: {
title: 'Nova tvrtka kreirana',
message: ` Pozdrav,<br>
Nova tvrtka ${data.parent.name} je kreirana od korisnika ${data.apiData.loggedUser.displayName}. `,
caption: ``,
option: {}
}
}
};
return keys[language][key];
},
};