Resend
Resend è un’API email moderna, pensata prima di tutto per gli sviluppatori, con una dashboard pulita e una configurazione del dominio rapida. È perfetta per i nuovi progetti che vogliono avere le email transazionali funzionanti in pochi minuti.
Scegli Resend quando inizi un nuovo progetto, ti piacciono gli strumenti semplici e invii volumi transazionali medio-bassi. Il piano gratuito è piccolo, ma basta per la maggior parte dei moduli di contatto. Per volumi molto alti al prezzo più basso guarda Amazon SES; per marketing e transazionali ospitati nell’UE, Brevo o Mailjet. Vedi la panoramica dei servizi.
Prerequisiti
Sezione intitolata “Prerequisiti”- Un account Resend.
- Un dominio verificato (Domains → Add domain). Senza, puoi inviare solo email di prova da
onboarding@resend.devall’indirizzo del tuo account: vedi Sandbox e limiti. - Una chiave API con “Sending access” (non “Full access”): API Keys → Create API key → Permission: Sending access, eventualmente limitata a un solo dominio. È il permesso minimo di cui Frontmail ha bisogno. Prova connessione riconosce una chiave di solo invio e la accetta.
Collegamento in Frontmail
Sezione intitolata “Collegamento in Frontmail”- Apri Servizi email → Aggiungi servizio → Resend.
- Compila i campi:
| Campo | Dove trovarlo | Esempio |
|---|---|---|
| Chiave API | API Keys (mostrata una sola volta) | re_123abc456def… |
| Segreto di firma del webhook | Webhooks → il tuo endpoint → Signing secret | whsec_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| Max email al secondo | Facoltativo; predefinito 2/s (il limite predefinito del team in Resend) | 2 |
- Clicca Verifica e salva.
- Il servizio viene salvato quando il controllo va a buon fine. Le credenziali sono cifrate con AWS KMS (envelope encryption).
DNS: SPF, DKIM e DMARC
Sezione intitolata “DNS: SPF, DKIM e DMARC”Resend mostra i record nella pagina del dominio. Per example.com hanno questo aspetto:
; DKIMresend._domainkey.example.com. TXT "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQ…"
; SPF + gestione dei bounce sul sottodominio "send" (il mittente della busta)send.example.com. MX 10 feedback-smtp.us-east-1.amazonses.com.send.example.com. TXT "v=spf1 include:amazonses.com ~all"
; DMARC (consigliato da Resend, non viene creato automaticamente)_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"- Il sottodominio
sendporta l’SPF, quindi non devi toccare il record SPF del dominio principale. - L’host MX contiene la regione che hai scelto per il dominio (
us-east-1,eu-west-1, …). - Alcuni provider DNS aggiungono il dominio automaticamente: inserisci
resend._domainkeyesendcome nomi host, non i nomi completi. - Inizia DMARC con
p=none, poi rendilo più restrittivo (p=quarantine/p=reject).
Regioni
Sezione intitolata “Regioni”Quando aggiungi un dominio, Resend ti permette di scegliere la sua regione di invio, ad es. Virginia del Nord (us-east-1), Irlanda (eu-west-1), San Paolo (sa-east-1) o Tokyo (ap-northeast-1). L’endpoint API (api.resend.com) è lo stesso per tutte le regioni, quindi in Frontmail non c’è un campo per la regione: la regione è una proprietà del dominio. Per cambiarla, aggiungi di nuovo il dominio con la nuova regione e aggiorna il DNS.
Sandbox e limiti
Sezione intitolata “Sandbox e limiti”- Senza un dominio verificato puoi inviare solo da
onboarding@resend.deve solo all’indirizzo email del tuo account Resend. Tutto il resto fallisce con403 – You can only send testing emails to your own email address, che Frontmail tratta come errore di autenticazione. - Piano gratuito: 3.000 email al mese, 100 al giorno, 1 dominio.
- Limite di frequenza: per impostazione predefinita 2 richieste al secondo per team; per questo il valore predefinito di Frontmail per Resend è 2/s. Resend può aumentarlo su richiesta.
- Il superamento della quota giornaliera o mensile restituisce
429 daily_quota_exceeded/monthly_quota_exceeded; ritentare non serve finché la quota non si azzera, quindi questi messaggi di solito finiscono comefailedcon il credito rimborsato.
Webhook (tracciamento della consegna)
Sezione intitolata “Webhook (tracciamento della consegna)”-
Copia l’URL del webhook dalla pagina del servizio in Frontmail (pulsante di copia):
https://api.frontmail.dev/webhooks/providers/resend/<token> -
In Resend apri Webhooks → Add endpoint, incolla l’URL e seleziona gli eventi:
| Evento Resend | Evento Frontmail |
|---|---|
email.delivered |
delivered |
email.bounced (Permanent) |
bounced – aggiunto alla lista di soppressione |
email.bounced (Transient / altro) |
registrato come soft bounce |
email.delivery_delayed |
registrato sul messaggio |
email.complained |
complained – aggiunto alla lista di soppressione |
email.opened |
opened (attiva il tracciamento delle aperture sul dominio) |
email.clicked |
clicked (attiva il tracciamento dei clic sul dominio) |
- Apri l’endpoint, copia il Signing secret (
whsec_…) e incollalo nel campo Segreto di firma del webhook di Frontmail.
Verifica della firma: Resend consegna i webhook tramite Svix. Frontmail controlla le intestazioni svix-id, svix-timestamp e svix-signature (HMAC-SHA256 di id.timestamp.body con il tuo segreto di firma) e rifiuta le richieste con un timestamp che si discosta di più di 5 minuti. Senza il segreto gli eventi non vengono verificati e vengono ignorati.
Frontmail aggiunge a ogni email un tag con l’ID del messaggio, così gli eventi possono essere associati.
Errori comuni
Sezione intitolata “Errori comuni”- auth – il servizio non funziona (chiave non valida o eliminata, dominio non verificato, restrizioni della modalità di test, 401/403). Il servizio viene segnato come
unhealthy; il proprietario riceve un’email e un banner nella dashboard. Subentra il servizio di riserva del modello, se c’è; altrimenti il credito viene rimborsato e il messaggio aspetta nella coda dei messaggi in attesa comeheld_service_errore viene inviato automaticamente dopo che avrai sistemato il servizio (ricontrollato al salvataggio e dal controllo di stato giornaliero). - permanent – questo messaggio non può essere inviato (destinatario non valido, validazione 422). Servizio di riserva se configurato, altrimenti
failede rimborsato. - transient – 5xx, 429, timeout. Ritentato con backoff esponenziale; dopo l’ultimo tentativo
failede rimborsato.
| Risposta di Resend | Classe | Cosa fare |
|---|---|---|
401 missing_api_key / 403 invalid_api_key |
auth | Crea una nuova chiave Sending access e aggiorna il servizio. |
403 validation_error – The example.com domain is not verified |
auth | Completa la verifica del dominio in Resend o correggi il dominio del mittente nel modello. |
403 validation_error – You can only send testing emails to your own email address |
auth | Verifica il tuo dominio; il mittente di prova resend.dev serve solo per la tua casella. |
422 validation_error – Invalid to field |
permanent | Vedi destinatario non valido. |
422 invalid_attachment / 422 validation_error (altri campi) |
permanent | Correggi il modello o l’allegato; vedi Modelli HTML. |
429 rate_limit_exceeded |
transient | Troppe richieste al secondo; tieni Max email al secondo a 2 o chiedi a Resend un limite più alto. |
429 daily_quota_exceeded / monthly_quota_exceeded |
transient | Quota esaurita; passa a un piano superiore. |
500 internal_server_error, timeout |
transient | Disservizio di Resend: Frontmail ritenta. |
Checklist
Sezione intitolata “Checklist”- Dominio verificato: TXT
resend._domainkey+ MX e TXT disend - Record DMARC pubblicato (
p=noneper iniziare) - Chiave API con solo Sending access
- Prova connessione va a buon fine
- Indirizzo mittente del modello sul dominio verificato (non
resend.dev) - Endpoint webhook con delivered, bounced, complained (+ opened/clicked)
- Segreto di firma (
whsec_…) copiato in Frontmail