# 15 — API: servizio email Leggi `CLAUDE.md`. ## Obiettivo Invio email transazionali tramite provider esterno, con provider sostituibile. ## Contesto Il provider non è ancora scelto (Brevo o Resend). Implementa l'astrazione e un adapter per ciascuno, selezionabile da env. ## Cosa fare - Interfaccia `EmailService.send({ to, template, data })`. - Adapter: `console` (dev), `brevo`, `resend`, selezionati da `EMAIL_PROVIDER`. - Template in `src/emails/` (HTML semplice + versione testo) con layout comune brandizzato: verifica email, reset password, conferma ordine, spedizione, annullamento, nuova richiesta preventivo (interna), preventivo inviato, risposta ticket, conferma prenotazione showroom. - Escaping di tutti i dati inseriti nei template. - Invio asincrono: un errore del provider viene loggato e non fa fallire la richiesta HTTP che l'ha generato. ## Criteri di accettazione - Con `EMAIL_PROVIDER=console` ogni template si renderizza e viene loggato. - Cambiare provider richiede solo variabili d'ambiente. - Test di rendering per ogni template. - `CLAUDE.md` aggiornato (variabili e lista template).