Torna agli articoli

Integrare email transazionali in Next.js

2026-09-07 · 3 min

L'email transazionale in Next.js è la posta che il prodotto deve inviare: la copia di un form nella tua inbox, un reset password, una ricevuta. Non è una newsletter. Mischiare le due sulla stessa identità SMTP è il modo in cui Gmail inizia a trattare i reset come promozioni.

Che cos'è un'email transazionale in un'app Next.js?

È un messaggio innescato da un'azione utente o da un evento di sistema, verso un destinatario, senza lista marketing. Nell'App Router è quasi sempre un Route Handler (app/api/.../route.ts) che valida il payload, parla con un'API email e risponde 202 o un errore che la UI può mostrare. La API key del provider sta sul server. Una chiave live nel bundle client è un magnete per abusi.

MailingCore è un'API email europea per questo lavoro: SDK JS o REST, template versionati, residenza dei dati nell'UE. Il piano Free è 100 email al mese e 5 template. Puoi chiamarla da una route server Next.js; non incollare una mc_live_ in un Client Component.

Architettura minima

  1. Una route server che sanifica i campi, controlla l'honeypot e limita per IP.
  2. Credenziali in variabili d'ambiente (MAILINGCORE_API_KEY, mai NEXT_PUBLIC_ per chiavi live).
  3. Uno slug di template pubblicato per tipo di messaggio (contact-form, password-reset).
  4. Una chiave di idempotenza sui retry così un doppio click non invia due volte.
  5. Log nel pannello — non console.log dell'elenco completo dei destinatari.

Pattern del form di contatto

Valida sul server anche se il form ha già required. Rifiuta gli honeypot che i bot compilano. Poi invia con template così il copy si modifica senza un deploy:

  • POST /api/contact riceve nome, email, messaggio.
  • La route chiama MailingCore.sendTemplate({ slug: "contact-inbox", to: process.env.CONTACT_INBOX, data }).
  • In opzione un secondo invio di conferma al visitatore.

Se il visitatore deve ricevere una copia, trattala come secondo transazionale, non come BCC del ticket interno. Il BCC è come filtrano indirizzi altrui in un thread.

Reset e ricevute

Usa un dominio From dedicato con SPF, DKIM e DMARC allineati. Disattiva tracking di aperture e clic sulla posta di sicurezza: pixel e link riscritti sembrano bulk. MailingCore documenta trackingDisabled per invio per questo motivo.

Salva i token in hash. Falli scadere. Non loggare l'URL completo di reset.

GDPR per team Next.js nell'UE

Se gli utenti sono nell'UE, il provider email è un responsabile del trattamento. Una region di invio in Irlanda non implica da sola che log e template vivano nell'Unione. Preferisci un vendor che dichiara storage in UE — o accetta SCC e documentale. MailingCore conserva in Europa; la region EU di Resend è un punto di invio con dati account negli USA secondo la policy pubblica. Verifica la documentazione vigente prima di dirlo a un DPO.

Prossimo passo

Prima la route di contatto. Autentica il dominio prima del traffico di produzione. Poi template di auth e billing. Vedi l'avvio rapido e MailingCore vs Resend se la residenza dei dati decide il provider.