init
This commit is contained in:
121
tools/email.tool.js
Normal file
121
tools/email.tool.js
Normal file
@@ -0,0 +1,121 @@
|
||||
|
||||
const nodeMailer = require('nodemailer');
|
||||
const config = require('../config');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
//Send One Mail
|
||||
exports.SendEmail = function(email_to, subject, text, callback){
|
||||
|
||||
if(!config.smtp_enabled)
|
||||
return;
|
||||
|
||||
console.log("Sending email to: " + email_to);
|
||||
|
||||
let transporter = nodeMailer.createTransport({
|
||||
host: config.smtp_server,
|
||||
port: config.smtp_port, //Port must be 465 (encrypted) or 587 (STARTTSL, first pre-request is unencrypted to know the encryption method supported, followed by encrypted request)
|
||||
secure: (config.smtp_port == "465"), //On port 587 secure must be false since it will first send unsecured pre-request to know which encryption to use
|
||||
requireTLS: true, //Force using encryption on port 587 on the second request
|
||||
auth: {
|
||||
user: config.smtp_user,
|
||||
pass: config.smtp_password,
|
||||
}
|
||||
});
|
||||
|
||||
let mailOptions = {
|
||||
from: '"' + config.smtp_name + '" <' + config.smtp_email + '>', // sender address
|
||||
to: email_to, // list of receivers
|
||||
subject: subject, // Subject line
|
||||
//text: text, // plain text body
|
||||
html: text, // html body
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, (error, info) => {
|
||||
if (error) {
|
||||
if(callback)
|
||||
callback(false, error);
|
||||
console.log(error);
|
||||
return;
|
||||
}
|
||||
|
||||
if(callback)
|
||||
callback(true);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
//Send same mail to multiple recipients (emails array)
|
||||
exports.SendEmailList = function(emails, subject, text, callback){
|
||||
|
||||
if(!config.smtp_enabled)
|
||||
return;
|
||||
|
||||
if(!Array.isArray(emails))
|
||||
return;
|
||||
|
||||
if(emails.length == 0)
|
||||
return;
|
||||
|
||||
let transporter = nodeMailer.createTransport({
|
||||
pool: true,
|
||||
host: config.smtp_server,
|
||||
port: config.smtp_port,
|
||||
secure: (config.smtp_port == "465"),
|
||||
requireTLS: true,
|
||||
auth: {
|
||||
user: config.smtp_user,
|
||||
pass: config.smtp_password,
|
||||
}
|
||||
});
|
||||
|
||||
var email_list = emails;
|
||||
var email_from = '"' + config.smtp_name + '" <' + config.smtp_email + '>';
|
||||
var total = emails.length;
|
||||
var sent_success = 0;
|
||||
var sent_count = 0;
|
||||
var ended = false;
|
||||
|
||||
transporter.on("idle", function () {
|
||||
|
||||
while (transporter.isIdle() && email_list.length > 0)
|
||||
{
|
||||
var email_to = email_list.shift();
|
||||
let mailOptions = {
|
||||
from: email_from,
|
||||
to: email_to,
|
||||
subject: subject,
|
||||
html: text,
|
||||
};
|
||||
|
||||
transporter.sendMail(mailOptions, (error, info) => {
|
||||
sent_count++;
|
||||
if (!error) {
|
||||
sent_success++;
|
||||
}
|
||||
|
||||
if(email_list.length == 0 && sent_count == total && !ended)
|
||||
{
|
||||
ended = true;
|
||||
if(callback)
|
||||
callback(sent_success);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
exports.ReadTemplate = function(template)
|
||||
{
|
||||
const rootDir = path.dirname(require.main.filename);
|
||||
const fullpath = rootDir + "/emails/" + template;
|
||||
|
||||
try{
|
||||
const html = fs.readFileSync(fullpath, "utf8");
|
||||
return html;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user