Files
payload/packages/plugin-cloud/src/email.ts

58 lines
1.6 KiB
TypeScript

import type { EmailTransport } from 'payload/config'
import nodemailer from 'nodemailer'
import type { PayloadCloudEmailOptions } from './types'
export const payloadCloudEmail = (args: PayloadCloudEmailOptions): EmailTransport | undefined => {
if (process.env.PAYLOAD_CLOUD !== 'true' || !args) {
return undefined
}
if (!args.apiKey) throw new Error('apiKey must be provided to use Payload Cloud Email ')
if (!args.defaultDomain)
throw new Error('defaultDomain must be provided to use Payload Cloud Email')
const { apiKey, config, defaultDomain } = args
const customDomainEnvs = Object.keys(process.env).filter(
(e) => e.startsWith('PAYLOAD_CLOUD_EMAIL_DOMAIN_') && !e.endsWith('API_KEY'),
)
const customDomains = customDomainEnvs.map((e) => process.env[e]).filter(Boolean)
if (customDomains.length) {
console.log(
`Configuring Payload Cloud Email for ${[defaultDomain, ...(customDomains || [])].join(', ')}`,
)
}
const fromName = config.email?.fromName || 'Payload CMS'
const fromAddress =
config.email?.fromAddress || `cms@${customDomains.length ? customDomains[0] : defaultDomain}`
const existingTransport = config.email && 'transport' in config.email && config.email?.transport
if (existingTransport) {
return {
fromAddress,
fromName,
transport: existingTransport,
}
}
return {
fromAddress,
fromName,
transport: nodemailer.createTransport({
auth: {
pass: apiKey,
user: 'resend',
},
host: 'smtp.resend.com',
port: 465,
secure: true,
}),
}
}