From 694d770bf4aecb460d7929acc8069365e33dd098 Mon Sep 17 00:00:00 2001 From: Iain Sproat <68657+iainsproat@users.noreply.github.com> Date: Tue, 18 Jun 2024 10:36:21 +0100 Subject: [PATCH] fix(email): fatally exit if email is enabled but cannot be initialized (#2204) --- .../modules/emails/utils/transporter.ts | 23 +++++++++++++++++-- .../modules/shared/helpers/envHelper.ts | 4 ++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/packages/server/modules/emails/utils/transporter.ts b/packages/server/modules/emails/utils/transporter.ts index 27f220217..e83e3116a 100644 --- a/packages/server/modules/emails/utils/transporter.ts +++ b/packages/server/modules/emails/utils/transporter.ts @@ -1,4 +1,5 @@ import { logger, moduleLogger } from '@/logging/logging' +import { isEmailEnabled, isTestEnv } from '@/modules/shared/helpers/envHelper' import { createTransport, Transporter } from 'nodemailer' let transporter: Transporter | undefined = undefined @@ -29,8 +30,26 @@ const initSmtpTransporter = async () => { export async function initializeTransporter(): Promise { let newTransporter = undefined - if (process.env.NODE_ENV === 'test') newTransporter = createJsonEchoTransporter() - if (process.env.EMAIL === 'true') newTransporter = await initSmtpTransporter() + if (isEmailEnabled()) { + newTransporter = await initSmtpTransporter() + + if (!newTransporter) { + const message = + '📧 Email provider is enabled but transport has not initialized correctly. Please review the email configuration or your email system for problems.' + moduleLogger.error(message) + throw new Error(message) + } + } + + if (!newTransporter && isTestEnv()) { + newTransporter = createJsonEchoTransporter() + if (!newTransporter) { + const message = + '📧 In testing a mock email provider is enabled but transport has not initialized correctly.' + moduleLogger.error(message) + throw new Error(message) + } + } if (!newTransporter) { moduleLogger.warn( diff --git a/packages/server/modules/shared/helpers/envHelper.ts b/packages/server/modules/shared/helpers/envHelper.ts index f19ec8509..d7ed34cdb 100644 --- a/packages/server/modules/shared/helpers/envHelper.ts +++ b/packages/server/modules/shared/helpers/envHelper.ts @@ -297,3 +297,7 @@ export function getGendoAIAPIEndpoint() { } export const getFeatureFlags = () => Environment.getFeatureFlags() + +export function isEmailEnabled() { + return process.env.EMAIL === 'true' +}