Guide
Migrer depuis Mailgun
Passez de Mailgun à Emailit. Faites correspondre les domaines, les clés et les routes, convertissez les appels API encodés en formulaire en JSON, et transférez SMTP, webhooks, adresses bloquées et modèles.
Ce guide fait correspondre les concepts, les appels API, les webhooks, les adresses bloquées et les modèles de Mailgun à leurs équivalents dans Emailit. Lisez d’abord Migrer vers Emailit pour l’ordre général et la façon de faire fonctionner les deux fournisseurs en parallèle.
Concepts
| Mailgun | Emailit |
|---|---|
| Compte et sous-comptes (subaccounts) | Compte et espaces de travail. Chaque espace de travail a ses propres domaines, clés, membres et crédits. |
Domaine, avec son propre chemin d’API /v3/<domain>/… |
Domaine d’envoi. Il n’y a qu’un endpoint d’envoi, et Emailit déduit le domaine de l’adresse from. |
| Clé API privée | Clé API Full Access |
| Clé d’envoi de domaine | Clé API Sending Only restreinte à un domaine |
| Identifiants SMTP par domaine | Votre clé API, utilisée comme mot de passe SMTP |
| Modèles par domaine, avec versions | Modèles par espace de travail, avec un alias et des versions |
| Webhooks par domaine | Webhooks par espace de travail |
| Routes | E-mails entrants avec le webhook email.received, ou l’automatisation Forward received email |
| Suppressions par domaine : bounces, unsubscribes, complaints | Une seule liste d’adresses bloquées par espace de travail |
| Mailing lists | Listes de contacts |
| Tags et variables personnalisées | meta |
| Logs et événements | Email APIEmails, Email APIEvents et Email APILogs |
| Validation d’e-mails | Vérification d’e-mails |
Mettre à jour vos appels API
Le POST /v3/<domain>/messages de Mailgun reçoit des champs de formulaire avec une authentification basique. Le POST /v2/emails d’Emailit reçoit du JSON avec un jeton bearer :
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 |
|---|---|
Authentification basique api:<key> |
Authorization: Bearer secret_… |
Champs multipart/form-data |
Un corps JSON |
from, subject, text, html |
Les mêmes noms |
to, cc, bcc (répétés ou séparés par des virgules) |
to, cc, bcc sous forme de chaîne ou de tableau, 50 adresses au maximum pour chacun |
h:Reply-To |
reply_to |
h:X-My-Header |
headers: { "X-My-Header": "…" } |
v:order-id, h:X-Mailgun-Variables |
meta: { "order-id": "…" }, renvoyé dans les événements webhook |
template et t:variables |
template (un ID ou un alias) et variables |
attachment, inline (envois de fichiers) |
attachments[] avec un content en base64 ou une url, plus content_type. Ajoutez content_id pour les images intégrées. |
o:deliverytime (date RFC 2822) |
scheduled_at (ISO 8601, horodatage Unix ou anglais courant) |
o:tracking, o:tracking-opens, o:tracking-clicks |
tracking: { "loads": true, "clicks": true } |
o:tag |
meta |
o:testmode |
Non disponible |
recipient-variables (envoi par lots) |
Non disponible. Envoyez une requête par destinataire avec ses propres variables. |
Réponse { "id": "<…>", "message": "Queued. Thank you." } |
200 avec id (em_…), message_id, status: "accepted" et ids par destinataire |
Si vous envoyiez depuis un sous-domaine comme mg.acme.com, ajoutez exactement ce sous-domaine dans Emailit. Les sous-domaines sont vérifiés séparément du domaine parent. Les hôtes d’API UE et US de Mailgun correspondent tous deux à l’unique endpoint d’Emailit. Consultez Envoyer un e-mail.
Changer les paramètres SMTP
| Paramètre | Mailgun | Emailit |
|---|---|---|
| Hôte | smtp.mailgun.org, ou l’hôte UE |
smtp.emailit.com |
| Port | 587, 465, 2525 ou 25 |
587 (STARTTLS), 465 (TLS), 2525, 2587 ou 25 |
| Nom d’utilisateur | Votre identifiant SMTP, par exemple postmaster@mg.acme.com |
emailit |
| Mot de passe | Votre mot de passe SMTP | Votre clé API Emailit |
Emailit ne lit pas les en-têtes X-Mailgun-*. Supprimez-les et réglez plutôt le suivi au niveau du domaine. Consultez Paramètres SMTP.
Faire correspondre les événements webhook
| Événement Mailgun | Événement Emailit |
|---|---|
accepted |
email.accepted (API uniquement) |
delivered |
email.delivered |
failed avec la sévérité temporary |
email.attempted |
failed avec la sévérité permanent |
email.bounced |
opened |
email.loaded |
clicked |
email.clicked |
complained |
email.complained |
unsubscribed |
email.unsubscribed, pour les e-mails de campagne uniquement |
| Route qui transfère vers une URL | email.received, puis récupérez le contenu avec GET /emails/{id} |
Le format des requêtes change :
- Mailgun envoie un événement par requête, avec les détails dans
event-data. Emailit envoie un tableau JSON de 100 événements au maximum. Parcourez le tableau avec une boucle. - Le nom de l’événement se trouve dans
type, et l’e-mail dansdata.object. Utilisezdata.object.id, l’IDem_de la réponse d’envoi, pour associer les événements aux messages. Vos valeursmetase trouvent dansdata.object.meta. - Mailgun signe un horodatage et un jeton à l’intérieur du corps. Emailit signe l’intégralité du corps brut : vérifiez
X-Emailit-Signatureà l’aide deX-Emailit-Timestampet de votre secretwhsec_. Consultez Signature des requêtes.
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);
}Transférer les adresses bloquées
-
Exportez les listes Bounces, Complaints et Unsubscribes de chaque domaine Mailgun depuis lequel vous envoyez, depuis le panneau de contrôle ou avec l’API de suppressions (
/v3/<domain>/bounces,/complaintset/unsubscribes). -
Constituez un seul CSV avec les colonnes
email,type,reason:email,type,reason old-address@example.com,recipient,mailgun bounce angry@example.com,recipient,mailgun complaintUtilisez le type
recipientpour les adresses qui ne doivent jamais recevoir d’e-mail. Il bloque les envois par l’API, par SMTP et par les campagnes. Les typesbounce,complaintetunsubscriben’arrêtent que les campagnes. -
Dans Email APISuppressions, sélectionnez Import et chargez le fichier. Chaque fichier peut contenir 10 000 lignes et peser 8 Mo au maximum. Les doublons sont ignorés.
Emailit a une seule liste d’adresses bloquées par espace de travail : les adresses de tous vos domaines Mailgun vont donc dans la même liste. Il n’existe pas de liste d’autorisation (allowlist). Consultez Gérer les adresses bloquées.
Transférer les modèles
Copiez le HTML de chaque modèle depuis Mailgun, puis importez-le dans Email MarketingTemplates ou créez-le avec l’API des modèles. Donnez-lui un alias et envoyez-le avec "template": "<alias>" et variables.
Les modèles Mailgun utilisent Handlebars. Temple couvre les usages courants :
| Mailgun (Handlebars) | Emailit (Temple) |
|---|---|
{{first_name}} |
{{first_name}} |
{{{html_block}}} |
{{html_block}}. Temple n’échappe jamais le HTML : échappez vous-même les saisies des utilisateurs. |
{{#if plan}}…{{else}}…{{/if}} |
Identique |
{{#unless plan}}…{{/unless}} |
{{#if plan}}{{else}}…{{/if}} |
{{#each items}}…{{/each}} |
Non pris en charge. Générez la liste dans votre code et transmettez-la comme une seule variable. |
{{#equal plan "pro"}}…{{/equal}} |
Non pris en charge. Transmettez un booléen comme is_pro et utilisez {{#if is_pro}}. |
| Pas de valeur par défaut intégrée | {{first_name|"there"}} ajoute une valeur de repli |
Consultez Temple et Importer et exporter des modèles.
Modifier le DNS
Ajoutez chaque domaine dans Email APIDomains et publiez les enregistrements Emailit. Ils utilisent leurs propres noms (emailit._domainkey, emailit.<domain>, et éventuellement go et inbound) : ils n’entrent donc pas en conflit avec l’enregistrement DKIM de Mailgun ni avec son CNAME de suivi email.<domain>. Vous n’avez pas besoin de modifier l’enregistrement SPF de votre domaine racine pour Emailit. Conservez votre enregistrement DMARC. Consultez Enregistrements DNS.
Après la bascule, supprimez les enregistrements DKIM et de suivi de Mailgun, et retirez include:mailgun.org de votre enregistrement SPF. Si vous recevez des e-mails via les routes Mailgun, conservez ses enregistrements MX jusqu’à ce que vous ayez déplacé ce trafic vers la réception Emailit, qui reçoit sur un sous-domaine comme inbound.acme.com.
Étapes suivantes
- Liste de contrôle avant la mise en production
- Configurer des webhooks
- Migration prioritaire : laissez les ingénieurs d’Emailit effectuer la migration avec vous