diff --git a/packages/email-nodemailer/src/index.ts b/packages/email-nodemailer/src/index.ts index 307eaf5a1..2d46ea544 100644 --- a/packages/email-nodemailer/src/index.ts +++ b/packages/email-nodemailer/src/index.ts @@ -48,10 +48,13 @@ async function buildEmail( emailConfig?: NodemailerAdapterArgs, ): Promise<{ defaultFromAddress: string; defaultFromName: string; transport: Transporter }> { if (!emailConfig) { + const transport = await createMockAccount(emailConfig) + if (!transport) throw new InvalidConfiguration('Unable to create Nodemailer test account.') + return { defaultFromAddress: 'info@payloadcms.com', defaultFromName: 'Payload', - transport: await createMockAccount(emailConfig), + transport, } } @@ -94,12 +97,12 @@ const ensureConfigHasFrom = (emailConfig: NodemailerAdapterArgs) => { /** * Use ethereal.email to create a mock email account */ -async function createMockAccount(emailConfig: NodemailerAdapterArgs) { +async function createMockAccount(emailConfig?: NodemailerAdapterArgs) { try { const etherealAccount = await nodemailer.createTestAccount() const smtpOptions = { - ...emailConfig, + ...(emailConfig || {}), auth: { pass: etherealAccount.pass, user: etherealAccount.user, @@ -120,7 +123,13 @@ async function createMockAccount(emailConfig: NodemailerAdapterArgs) { console.info(`Mock email account password: ${pass}`) } return transport - } catch (err) { - console.error({ err, msg: 'There was a problem setting up the mock email handler' }) + } catch (err: unknown) { + if (err instanceof Error) { + console.error({ err, msg: 'There was a problem setting up the mock email handler' }) + throw new InvalidConfiguration( + `Unable to create Nodemailer test account. Error: ${err.message}`, + ) + } + throw new InvalidConfiguration('Unable to create Nodemailer test account.') } } diff --git a/packages/email-nodemailer/tsconfig.json b/packages/email-nodemailer/tsconfig.json index f4391b4fa..9e82b9e07 100644 --- a/packages/email-nodemailer/tsconfig.json +++ b/packages/email-nodemailer/tsconfig.json @@ -6,13 +6,18 @@ "emitDeclarationOnly": true, "outDir": "./dist" /* Specify an output folder for all emitted files. */, "rootDir": "./src" /* Specify the root folder within your source files. */, + "strict": true, }, "exclude": [ "dist", + "node_modules", "src/**/*.spec.js", "src/**/*.spec.jsx", "src/**/*.spec.ts", "src/**/*.spec.tsx" ], "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.d.ts", "src/**/*.json"], + "references": [ + { "path": "../payload" }, + ] }