Guida
Migra da Mailgun
Passa da Mailgun a Emailit. Fai corrispondere domini, chiavi e routes, converti in JSON le chiamate API con form encoding e sposta SMTP, webhook, soppressioni e template.
Questa guida fa corrispondere concetti, chiamate API, webhook, soppressioni e template di Mailgun ai loro equivalenti in Emailit. Leggi prima Passa a Emailit per l’ordine generale e per sapere come usare entrambi i provider in parallelo.
Concetti
| Mailgun | Emailit |
|---|---|
| Account e subaccounts | Account e workspace. Ogni workspace ha i propri domini, chiavi, membri e crediti. |
Dominio, con un proprio percorso API /v3/<domain>/… |
Dominio di invio. C’è un solo endpoint di invio, ed Emailit ricava il dominio dall’indirizzo from. |
| Private API key | Chiave API Full Access |
| Domain sending key | Chiave API Sending Only limitata a un dominio |
| Credenziali SMTP per dominio | La tua chiave API, usata come password SMTP |
| Template per dominio, con versioni | Template per workspace, con un alias e versioni |
| Webhook per dominio | Webhook per workspace |
| Routes | Email in entrata con il webhook email.received, oppure l’automazione Forward received email |
| Suppressions per dominio: bounces, unsubscribes, complaints | Una lista di soppressione per workspace |
| Mailing lists | Liste |
| Tags e custom variables | meta |
| Logs ed events | Email APIEmails, Email APIEvents e Email APILogs |
| Email validation | Verifica email |
Aggiorna le chiamate API
POST /v3/<domain>/messages di Mailgun accetta campi di un modulo con autenticazione basic. POST /v2/emails di Emailit accetta JSON con un bearer token:
curl -s --user "api:$MAILGUN_API_KEY" \
https://api.mailgun.net/v3/mg.acme.com/messages \
-F from='Acme <hello@mg.acme.com>' \
-F to='ada@example.com' \
-F subject='Your receipt' \
-F text='Thanks for your order.' \
--form-string html='<p>Thanks for your order.</p>'curl https://api.emailit.com/v2/emails \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "Acme <hello@mg.acme.com>",
"to": "ada@example.com",
"subject": "Your receipt",
"text": "Thanks for your order.",
"html": "<p>Thanks for your order.</p>"
}'| Mailgun | Emailit |
|---|---|
Autenticazione basic api:<key> |
Authorization: Bearer secret_… |
Campi multipart/form-data |
Un corpo JSON |
from, subject, text, html |
Gli stessi nomi |
to, cc, bcc (ripetuti o separati da virgole) |
to, cc, bcc come stringa o array di massimo 50 ciascuno |
h:Reply-To |
reply_to |
h:X-My-Header |
headers: { "X-My-Header": "…" } |
v:order-id, h:X-Mailgun-Variables |
meta: { "order-id": "…" }, restituito negli eventi webhook |
template e t:variables |
template (un ID o un alias) e variables |
attachment, inline (caricamento di file) |
attachments[] con content in base64 o un url, più content_type. Aggiungi content_id per le immagini inline. |
o:deliverytime (data RFC 2822) |
scheduled_at (ISO 8601, timestamp Unix o inglese semplice) |
o:tracking, o:tracking-opens, o:tracking-clicks |
tracking: { "loads": true, "clicks": true } |
o:tag |
meta |
o:testmode |
Non disponibile |
recipient-variables (invio in batch) |
Non disponibile. Invia una richiesta per destinatario con le sue variables. |
Risposta { "id": "<…>", "message": "Queued. Thank you." } |
200 con id (em_…), message_id, status: "accepted" e ids per destinatario |
Se inviavi da un sottodominio come mg.acme.com, aggiungi esattamente quel sottodominio in Emailit. I sottodomini vengono verificati separatamente dal dominio principale. Gli host API UE e USA di Mailgun corrispondono entrambi all’unico endpoint di Emailit. Vedi Invia un’email.
Cambia le impostazioni SMTP
| Impostazione | Mailgun | Emailit |
|---|---|---|
| Host | smtp.mailgun.org, oppure l’host UE |
smtp.emailit.com |
| Porta | 587, 465, 2525 o 25 |
587 (STARTTLS), 465 (TLS), 2525, 2587 o 25 |
| Nome utente | Il tuo login SMTP, ad esempio postmaster@mg.acme.com |
emailit |
| Password | La tua password SMTP | La tua chiave API di Emailit |
Emailit non legge gli header X-Mailgun-*. Rimuovili e imposta invece il tracciamento sul dominio. Vedi Impostazioni SMTP.
Fai corrispondere gli eventi webhook
| Evento Mailgun | Evento Emailit |
|---|---|
accepted |
email.accepted (solo API) |
delivered |
email.delivered |
failed con severity temporary |
email.attempted |
failed con severity permanent |
email.bounced |
opened |
email.loaded |
clicked |
email.clicked |
complained |
email.complained |
unsubscribed |
email.unsubscribed, solo per le email delle campagne |
| Route che inoltra a un URL | email.received, poi recupera il contenuto con GET /emails/{id} |
Cambia il formato della richiesta:
- Mailgun invia un evento per richiesta, con i dettagli in
event-data. Emailit invia un array JSON di massimo 100 eventi. Esegui un ciclo sull’array. - Il nome dell’evento è in
type, e l’email è indata.object. Usadata.object.id, l’IDem_della risposta all’invio, per associare gli eventi ai messaggi. I tuoi valorimetasono indata.object.meta. - Mailgun firma un timestamp e un token all’interno del corpo. Emailit firma l’intero corpo grezzo: verifica
X-Emailit-Signaturerispetto aX-Emailit-Timestampe al tuo secretwhsec_. Vedi Verifica le firme dei webhook.
for (const event of req.body) {
const email = event.data.object;
if (event.type === 'email.bounced') markBounced(email.to, email.id);
if (event.type === 'email.complained') unsubscribe(email.to);
}Sposta le soppressioni
-
Esporta le liste Bounces, Complaints e Unsubscribes di ogni dominio Mailgun da cui invii, dal pannello di controllo o con l’API delle suppressions (
/v3/<domain>/bounces,/complaintse/unsubscribes). -
Crea un unico CSV con le colonne
email,type,reason:email,type,reason old-address@example.com,recipient,mailgun bounce angry@example.com,recipient,mailgun complaintUsa il tipo
recipientper gli indirizzi che non devono mai ricevere email. Blocca gli invii via API, SMTP e campagne. I tipibounce,complainteunsubscribefermano solo le campagne. -
In Email APISuppressions, seleziona Import e carica il file. Ogni file può avere fino a 10.000 righe e pesare al massimo 8 MB. I duplicati vengono saltati.
Emailit ha una sola lista di soppressione per workspace, quindi gli indirizzi di tutti i tuoi domini Mailgun finiscono nella stessa lista. Non esiste una allowlist. Vedi Gestisci le soppressioni.
Sposta i template
Copia l’HTML di ogni template da Mailgun, poi importalo in Email MarketingTemplates o crealo con l’API dei template. Assegnagli un alias e invialo con "template": "<alias>" e variables.
I template di Mailgun usano Handlebars. Temple copre le parti più comuni:
| Mailgun (Handlebars) | Emailit (Temple) |
|---|---|
{{first_name}} |
{{first_name}} |
{{{html_block}}} |
{{html_block}}. Temple non applica mai l’escape all’HTML, quindi esegui tu l’escape dell’input degli utenti. |
{{#if plan}}…{{else}}…{{/if}} |
Uguale |
{{#unless plan}}…{{/unless}} |
{{#if plan}}{{else}}…{{/if}} |
{{#each items}}…{{/each}} |
Non supportato. Genera l’elenco nel tuo codice e passalo come un’unica variabile. |
{{#equal plan "pro"}}…{{/equal}} |
Non supportato. Passa un booleano come is_pro e usa {{#if is_pro}}. |
| Nessun valore predefinito integrato | {{first_name|"there"}} aggiunge un valore di riserva |
Vedi Temple e Importa ed esporta i template.
Cambia i DNS
Aggiungi ogni dominio in Email APIDomains e pubblica i record di Emailit. Usano nomi propri (emailit._domainkey, emailit.<domain> e, facoltativamente, go e inbound), quindi non entrano in conflitto con il record DKIM di Mailgun né con il suo CNAME di tracciamento email.<domain>. Per Emailit non devi modificare il record SPF del dominio principale. Mantieni il record DMARC. Vedi Record DNS.
Dopo il passaggio, rimuovi i record DKIM e di tracciamento di Mailgun, e togli include:mailgun.org dal record SPF. Se ricevi posta tramite le routes di Mailgun, mantieni i suoi record MX finché non hai spostato quel traffico sulle email in entrata di Emailit, che ricevono su un sottodominio come inbound.acme.com.
Passaggi successivi
- Checklist per andare in produzione
- Configura un webhook
- Migrazione prioritaria: lascia che i tecnici di Emailit facciano la migrazione insieme a te