import type { QueuedFormEmail } from '@admin/actions/email/queued-form-email' import type { FormEmailDeliveryInput } from '@admin/utils/email/form-email-delivery-input' import { sendQueuedEmail } from '@admin/actions/email/send-queued-email' import { isValidEmail } from '@admin/utils/email/is-valid-email' import { normalizeEmailList } from '@admin/utils/email/normalize-email-list' import { renderNotificationEmail } from '@admin/utils/email/render-notification-email' import { renderThankYouEmail } from '@admin/utils/email/render-thank-you-email' export async function sendFormEmails(input: FormEmailDeliveryInput): Promise { const notificationEmails = normalizeEmailList(input.notificationEmails) const submitterEmail = input.submitterEmail?.trim() const queuedEmails: QueuedFormEmail[] = [] if (notificationEmails.length > 0) { queuedEmails.push({ label: 'form notification', to: notificationEmails, subject: `New ${input.formLabel} submission`, html: renderNotificationEmail(input) }) } if (submitterEmail && isValidEmail(submitterEmail)) { queuedEmails.push({ label: 'form submitter confirmation', to: submitterEmail, subject: `We received your ${input.formLabel} submission`, html: renderThankYouEmail(input) }) } if (queuedEmails.length === 0) { return } const results = await Promise.all(queuedEmails.map(sendQueuedEmail)) const failures = results.filter(({ result }) => !result.delivered) if (failures.length > 0) { console.error( `Failed to send ${failures.length} ${input.formName} form email(s):`, failures.map(({ label, result }) => `${label}: ${result.reason ?? 'unknown error'}`) ) } }