import { transport } from "./mailer"; // Fire-and-forget by design — callers should not await this in a way that // blocks or fails the actual error response the customer sees. Wrap // everything in its own try/catch so a broken mail relay never becomes a // second, worse failure on top of the one being reported. export function sendCriticalAlert(subject: string, details: Record): void { transport .sendMail({ from: '"einfach produktiv Alerts" ', to: "admin@mk360.de", subject: `[einfach produktiv] ${subject}`, text: JSON.stringify(details, null, 2), }) .catch((err) => { console.error("sendCriticalAlert: failed to send alert email", err); }); } // The *initial* verification email (on registration) is sent by Payload // itself, via Customers.ts's own afterChange hook — that one fires // automatically on create and needs no separate wiring. This one is only // for the "erneut senden" resend path (app/api/account/resend-verification/ // route.ts), which updates the token via the customer's own session // (app/lib/customerAuth.ts's resendVerificationEmail) but has no Payload // hook to piggyback on for a plain update, so it sends directly instead — // same Hostinger transport as the alert above, just a different template. export async function sendVerificationEmail(to: string, firstName: string, token: string): Promise { const url = `https://einfach-produktiv.mk360.de/api/account/verify-email?token=${token}`; await transport.sendMail({ from: '"einfach produktiv" ', to, subject: "Bitte bestätige deine E-Mail-Adresse", html: `

Hallo ${firstName},

bitte bestätige deine E-Mail-Adresse für dein Konto bei einfach produktiv:

${url}

Der Link ist 24 Stunden gültig.

`, }); }