@churchapps/apihelper
Version:
Library of helper functions not specific to any one ChurchApps project or framework.
97 lines • 3.82 kB
JavaScript
;
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