datasquirel/package-shared/functions/backend/handleNodemailer.ts
Benjamin Toby fe97939faf Updates
2025-03-31 07:43:38 +01:00

80 lines
2.3 KiB
TypeScript

import fs from "fs";
import _ from "lodash";
import nodemailer from "nodemailer";
import Mail from "nodemailer/lib/mailer";
import SMTPTransport from "nodemailer/lib/smtp-transport";
export type HandleNodemailerParam = Mail.Options & {
senderName?: string;
alias?: string | null;
options?: SMTPTransport.Options;
};
/**
* # Handle mails With Nodemailer
*/
export default async function handleNodemailer(
params: HandleNodemailerParam
): Promise<SMTPTransport.SentMessageInfo | undefined> {
if (
!process.env.DSQL_MAIL_HOST ||
!process.env.DSQL_MAIL_EMAIL ||
!process.env.DSQL_MAIL_PASSWORD
) {
return undefined;
}
let transporter = nodemailer.createTransport({
host: process.env.DSQL_MAIL_HOST,
port: 465,
secure: true,
auth: {
user: process.env.DSQL_MAIL_EMAIL,
pass: process.env.DSQL_MAIL_PASSWORD,
},
...params.options,
});
const sender = (() => {
if (params.alias?.match(/support/i)) return process.env.DSQL_MAIL_EMAIL;
return process.env.DSQL_MAIL_EMAIL;
})();
const mailRootPath = process.env.DSQL_MAIL_ROOT || "./email/index.html";
let mailRoot = fs.existsSync(mailRootPath)
? fs.readFileSync(mailRootPath, "utf8")
: undefined;
let finalHtml = mailRoot
? mailRoot
.replace(/{{email_body}}/, params.html?.toString() || "")
.replace(/{{issue_date}}/, Date().substring(0, 24))
: params.html?.toString();
try {
let mailObject: any = {};
mailObject["from"] = `"${
params.senderName || "Datasquirel"
}" <${sender}>`;
mailObject["sender"] = sender;
if (params.alias) mailObject["replyTo"] = sender;
mailObject["to"] = params.to;
mailObject["subject"] = params.subject;
mailObject["text"] = params.text;
mailObject["html"] = finalHtml;
let info = await transporter.sendMail({
..._.omit(mailObject, ["alias", "senderName", "options"]),
...mailObject,
});
return info;
} catch (error: any) {
console.log("ERROR in handleNodemailer Function =>", error.message);
}
return undefined;
}