- Progress

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-04-16 15:36:27 -04:00
parent 34d773bcd8
commit bb205af019
8 changed files with 323 additions and 105 deletions

View File

@@ -12,6 +12,7 @@ const client = require("../graphql-client/graphql-client").client;
const queries = require("../graphql-client/queries");
const { isObject } = require("lodash");
const generateEmailTemplate = require("./generateTemplate");
const moment = require("moment");
const ses = new aws.SES({
// The key apiVersion is no longer supported in v3, and can be removed.
@@ -23,12 +24,46 @@ const ses = new aws.SES({
rome: "us-east-2"
})
});
let transporter = nodemailer.createTransport({
SES: { ses, aws }
});
exports.sendServerEmail = async function ({ subject, text }) {
// Get the image from the URL and return it as a base64 string
const getImage = async (imageUrl) => {
let image = await axios.get(imageUrl, { responseType: "arraybuffer" });
let raw = Buffer.from(image.data).toString("base64");
return "data:" + image.headers["content-type"] + ";base64," + raw;
};
// Log the email in the database
const logEmail = async (req, email) => {
try {
const insertresult = await client.request(queries.INSERT_EMAIL_AUDIT, {
email: {
to: email.to,
cc: email.cc,
subject: email.subject,
bodyshopid: req.body.bodyshopid,
useremail: req.user.email,
contents: req.body.html,
jobid: req.body.jobid,
sesmessageid: email.messageId,
status: "Sent"
}
});
console.log(insertresult);
} catch (error) {
logger.log("email-log-error", "error", req.user.email, null, {
from: `${req.body.from.name} <${req.body.from.address}>`,
to: req.body.to,
cc: req.body.cc,
subject: req.body.subject
// info,
});
}
};
const sendServerEmail = async ({ subject, text }) => {
if (process.env.NODE_ENV === undefined) return;
try {
transporter.sendMail(
@@ -60,7 +95,8 @@ exports.sendServerEmail = async function ({ subject, text }) {
logger.log("server-email-failure", "error", null, null, error);
}
};
exports.sendTaskEmail = async function ({ to, subject, text, attachments }) {
const sendTaskEmail = async ({ to, subject, text, attachments }) => {
try {
transporter.sendMail(
{
@@ -84,19 +120,8 @@ exports.sendTaskEmail = async function ({ to, subject, text, attachments }) {
}
};
// This will be called by a Hasura event trigger
exports.taskAssignedEmail = async function (req, res) {
console.dir(req, { depth: null });
return res.status(200).json(req);
};
// This will be called by a Hasura event trigger
exports.tasksRemindEmail = async function (req, res) {
console.dir(req, { depth: null });
return res.status(200).json(req);
};
exports.sendEmail = async (req, res) => {
// Send an email
const sendEmail = async (req, res) => {
logger.log("send-email", "DEBUG", req.user.email, null, {
from: `${req.body.from.name} <${req.body.from.address}>`,
replyTo: req.body.ReplyTo.Email,
@@ -204,40 +229,8 @@ exports.sendEmail = async (req, res) => {
);
};
async function getImage(imageUrl) {
let image = await axios.get(imageUrl, { responseType: "arraybuffer" });
let raw = Buffer.from(image.data).toString("base64");
return "data:" + image.headers["content-type"] + ";base64," + raw;
}
async function logEmail(req, email) {
try {
const insertresult = await client.request(queries.INSERT_EMAIL_AUDIT, {
email: {
to: email.to,
cc: email.cc,
subject: email.subject,
bodyshopid: req.body.bodyshopid,
useremail: req.user.email,
contents: req.body.html,
jobid: req.body.jobid,
sesmessageid: email.messageId,
status: "Sent"
}
});
console.log(insertresult);
} catch (error) {
logger.log("email-log-error", "error", req.user.email, null, {
from: `${req.body.from.name} <${req.body.from.address}>`,
to: req.body.to,
cc: req.body.cc,
subject: req.body.subject
// info,
});
}
}
exports.emailBounce = async function (req, res) {
// This will be called by an SNS event trigger
const emailBounce = async (req, res) => {
try {
const body = JSON.parse(req.body);
if (body.Type === "SubscriptionConfirmation") {
@@ -311,3 +304,10 @@ ${body.bounce?.bouncedRecipients.map(
}
res.sendStatus(200);
};
module.exports = {
sendEmail,
sendServerEmail,
sendTaskEmail,
emailBounce
};