Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 2 additions & 27 deletions app/libs/email.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,8 @@
const nodemailer = require('nodemailer');
const CONFIG = require('../config');
const db = require('../models');
const {addJobToEmailQueue} = require('../queue');

const {email, password, domain, ehost} = CONFIG.get('email');

const sendEmail = async (subject, text, toEmail) => {
const transporter = nodemailer.createTransport({
host: ehost,
auth: {
user: email,
pass: password,
},
tls: {
rejectUnauthorized: false,
},
});

const mailOptions = {
from: `${email}${domain}`,
to: toEmail,
subject,
text,
};

return transporter.sendMail(mailOptions);
};
const {email, domain} = CONFIG.get('email');

const getEmailList = async (triggers) => {
const notifs = await db.models.notification.scope('extended').findAll({
Expand All @@ -36,15 +13,13 @@ const getEmailList = async (triggers) => {
for (const notif of notifs) {
if (notif.user) {
if (!emailList.some((el) => {return el.toEmail === notif.user.email;})
&& notif.user.email.endsWith(domain)
&& notif.user.allowNotifications) {
emailList.push({toEmail: notif.user.email, notifId: notif.id, eventType: notif.eventType});
}
}
if (notif.userGroup) {
for (const groupUser of notif.userGroup.users) {
if (!emailList.some((el) => {return el.toEmail === groupUser.email;})
&& groupUser.email.endsWith(domain)
&& groupUser.allowNotifications) {
emailList.push({toEmail: groupUser.email, notifId: notif.id, eventType: notif.eventType});
}
Expand All @@ -69,4 +44,4 @@ const notifyUsers = async (subject, text, triggers) => {
}
};

module.exports = {sendEmail, getEmailList, notifyUsers};
module.exports = {getEmailList, notifyUsers};
26 changes: 26 additions & 0 deletions app/libs/mailer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
const nodemailer = require('nodemailer');
const CONFIG = require('../config');

const {email, password, domain, ehost} = CONFIG.get('email');

const transporter = nodemailer.createTransport({
host: ehost,
auth: {
user: email,
pass: password,
},
tls: {
rejectUnauthorized: false,
},
});

const sendEmail = async ({to, subject, text}) => {
return transporter.sendMail({
from: `${email}${domain}`,
to,
subject,
text,
});
};

module.exports = {sendEmail};
20 changes: 9 additions & 11 deletions app/queue.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,26 @@
const {Queue, Worker} = require('bullmq');
const nodemailer = require('nodemailer');
const {graphkbGetReadonlyGroupId, graphkbAddUser} = require('./api/graphkb');
const conf = require('./config');
const createReport = require('./libs/createReport');
const db = require('./models');
const {sendEmail} = require('./libs/email');
const {sendEmail} = require('./libs/mailer');

const {host, port, enableQueue} = conf.get('redis_queue');
const logger = require('./log');
const CONFIG = require('./config');

const {email, password, ehost, failemail} = CONFIG.get('email');
const {failemail} = CONFIG.get('email');

let emailQueue = null;
let reportQueue = null;
let graphkbNewUserQueue = null;

const EMAIL_REMOVE_CONFIG = {
backoff: {
type: 'exponential',
delay: 2000,
},
delay: 5000,
removeOnComplete: {age: 3600},
removeOnFail: {age: 86400},
attempts: 10,
Expand Down Expand Up @@ -77,7 +81,7 @@ const onEmailWorkerFailed = async (job) => {

try {
if (failemail) {
await sendEmail('Notification failed', job.data, failemail);
await sendEmail({to: failemail, subject: 'Notification failed', text: job.data});
}
} catch (error) {
logger.error(`Unable to send email ${error}`);
Expand All @@ -93,7 +97,6 @@ const setUpEmailWorker = (emailJobProcessor) => {
});
worker.on('completed', async (job) => {
await onEmailWorkerCompleted(job);
await job.remove();
logger.info(`Email job with ID ${job.id} has been completed.`);
});
worker.on('failed', async (job, err) => {
Expand All @@ -103,13 +106,8 @@ const setUpEmailWorker = (emailJobProcessor) => {
};

const emailProcessor = async (job) => {
const transporter = nodemailer.createTransport({
host: ehost,
auth: {user: email, pass: password},
tls: {rejectUnauthorized: false},
});
try {
await transporter.sendMail(job.data.mailOptions);
await sendEmail(job.data.mailOptions);
} catch (err) {
logger.error(JSON.stringify(job.data.mailOptions));
throw new Error(err);
Expand Down
4 changes: 2 additions & 2 deletions app/routes/email/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const {StatusCodes} = require('http-status-codes');
const express = require('express');
const {sendEmail} = require('../../libs/email');
const {sendEmail} = require('../../libs/mailer');

const router = express.Router({mergeParams: true});
const logger = require('../../log');
Expand All @@ -10,7 +10,7 @@ const logger = require('../../log');
*/
router.get('/', async (req, res) => {
try {
const resp = await sendEmail('Test email', 'Test email', req.user.email);
const resp = await sendEmail({to: req.user.email, subject: 'Test email', text: 'Test email'});
logger.info({message: `Test email sent to ${req.user.email}`, response: resp.response});
return res.status(StatusCodes.OK).json({message: 'Email sent successfully'});
} catch (err) {
Expand Down
1 change: 0 additions & 1 deletion app/routes/report/reportUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,6 @@ router.route('/')
projectId: reportProject.project_id,
},
);
logger.info('Email sent successfully');
} catch (error) {
logger.error(`Email not sent successfully: ${error}`);
}
Expand Down
Loading