Files
klz-cables.com/.pnpm-store/v10/files/33/19d45cc38544b0c5b8fbaeda9f6d2cbf6f4fbee2a842dddff20d9b4c8e449cfc8c903bf3dee6e1411a22e546ea23edca4f6ddc61291e396d8578a24b8e535c
Marc Mintel 5397309103
Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
fix(products): fix breadcrumbs and product filtering (backport from main)
2026-02-24 16:04:21 +01:00

99 lines
3.4 KiB
Plaintext

/* eslint-disable no-console */ import nodemailer from 'nodemailer';
import { InvalidConfiguration } from 'payload';
/**
* Creates an email adapter using nodemailer
*
* If no email configuration is provided, an ethereal email test account is returned
*/ export const nodemailerAdapter = async (args)=>{
const { defaultFromAddress, defaultFromName, transport } = await buildEmail(args);
const adapter = ()=>({
name: 'nodemailer',
defaultFromAddress,
defaultFromName,
sendEmail: async (message)=>{
return await transport.sendMail({
from: `${defaultFromName} <${defaultFromAddress}>`,
...message
});
}
});
return adapter;
};
async function buildEmail(emailConfig) {
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
};
}
// Create or extract transport
let transport;
if ('transport' in emailConfig && emailConfig.transport) {
;
({ transport } = emailConfig);
} else if ('transportOptions' in emailConfig && emailConfig.transportOptions) {
transport = nodemailer.createTransport(emailConfig.transportOptions);
} else {
transport = await createMockAccount(emailConfig);
}
if (!emailConfig.skipVerify) {
await verifyTransport(transport);
}
return {
defaultFromAddress: emailConfig.defaultFromAddress,
defaultFromName: emailConfig.defaultFromName,
transport
};
}
async function verifyTransport(transport) {
try {
await transport.verify();
} catch (err) {
console.error({
err,
msg: 'Error verifying Nodemailer transport.'
});
}
}
/**
* Use ethereal.email to create a mock email account
*/ async function createMockAccount(emailConfig) {
try {
const etherealAccount = await nodemailer.createTestAccount();
const smtpOptions = {
...emailConfig || {},
auth: {
pass: etherealAccount.pass,
user: etherealAccount.user
},
fromAddress: emailConfig?.defaultFromAddress,
fromName: emailConfig?.defaultFromName,
host: 'smtp.ethereal.email',
port: 587,
secure: false
};
const transport = nodemailer.createTransport(smtpOptions);
const { pass, user, web } = etherealAccount;
console.info('E-mail configured with ethereal.email test account. ');
console.info(`Log into mock email provider at ${web}`);
console.info(`Mock email account username: ${user}`);
console.info(`Mock email account password: ${pass}`);
return transport;
} catch (err) {
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.');
}
}
//# sourceMappingURL=index.js.map