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 { 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; }