UNPKG

@churchapps/apihelper

Version:

Library of helper functions not specific to any one ChurchApps project or framework.

97 lines 3.82 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EmailHelper = void 0; const client_ses_1 = require("@aws-sdk/client-ses"); const nodemailer_1 = __importDefault(require("nodemailer")); // Removed nodemailer-direct-transport due to security vulnerabilities const _1 = require("."); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); class EmailHelper { static getSESClient() { return new client_ses_1.SESClient({ region: "us-east-2" }); } static async sendTemplatedEmail(from, to, appName, appUrl, subject, contents, emailTemplate = "EmailTemplate.html") { if (!appName) appName = "Chums"; if (!appUrl) appUrl = "https://chums.org"; const template = EmailHelper.readTemplate(emailTemplate); const emailBody = template .replace("{appLink}", "<a target='_blank' rel='noreferrer noopener' href=\"" + appUrl + "/\">" + appName + "</a>") .replace("{contents}", contents); await EmailHelper.sendEmail({ from, to, subject, body: emailBody }); } static readTemplate(templateFile) { if (!templateFile) templateFile = "EmailTemplate.html"; const filePath = path_1.default.join(__dirname, "../../src/tools/templates/" + templateFile); const buffer = fs_1.default.readFileSync(filePath); const contents = buffer.toString(); return contents; } static async sendSes({ from, to, subject, body }) { const sesClient = this.getSESClient(); const sendCommand = new client_ses_1.SendEmailCommand({ Destination: { ToAddresses: [to] }, Message: { Body: { Html: { Charset: 'UTF-8', Data: body } }, Subject: { Charset: 'UTF-8', Data: subject } }, Source: from }); await sesClient.send(sendCommand); } static async sendEmail({ from, to, subject, body }) { try { // Use a safer fallback - streamline transport (for testing/dev) or require proper SMTP config let transporter = nodemailer_1.default.createTransport({ streamTransport: true, newline: 'unix', buffer: true }); if (_1.EnvironmentBase.mailSystem === 'SES') { await this.sendSes({ from, to, subject, body }); } else { if (_1.EnvironmentBase.mailSystem === "SMTP") { transporter = nodemailer_1.default.createTransport({ host: _1.EnvironmentBase.smtpHost, secure: _1.EnvironmentBase.smtpSecure, auth: { user: _1.EnvironmentBase.smtpUser, pass: _1.EnvironmentBase.smtpPass } }); } if (_1.EnvironmentBase.mailSystem === "") { console.log("****Email server not configured: "); console.log(subject); console.log(body); } else { await transporter.sendMail({ from, to, subject, html: body }); } } return null; } catch (err) { throw err; } } } exports.EmailHelper = EmailHelper; //# sourceMappingURL=EmailHelper.js.map