Mailgun : Guide technique complet pour l'email transactionnel
Par CaptainDNS
Publié le 21 janvier 2026

- 📢 Mailgun utilise votre domaine dans le Return-Path (
bounce+id@votredomaine.com), permettant l'alignement SPF natif pour DMARC dès le plan de base. - L'API REST est la méthode recommandée : jusqu'à 1 000 destinataires par appel, rate limits non documentés (sauf Domains API : 300 req/min).
- Automatic Sender Security génère 2 CNAME DKIM avec rotation automatique tous les 120 jours, clés 2048 bits par défaut.
- IP dédiée recommandée à partir de 1 million emails/mois, avec warm-up automatique sur 15+ jours et coût de 59$/IP/mois supplémentaire.
- Plan Flex augmenté à 2,00$/1000 emails depuis décembre 2025 (doublement du tarif).
Introduction
Mailgun s'est imposé comme l'une des plateformes d'email transactionnel les plus robustes du marché, traitant plus de 600 milliards d'emails par an pour plus de 100 000 clients. Acquis par Sinch en décembre 2021 pour 1,9 milliard USD, le service combine une API REST puissante, un relay SMTP universel et des fonctionnalités d'authentification avancées qui le distinguent de la concurrence.
La force de Mailgun réside dans trois piliers techniques majeurs : une approche API-first orientée développeurs, une Domain Verification qui utilise votre propre domaine pour le Return-Path (alignement SPF natif pour DMARC), et un système de rotation automatique des clés DKIM 2048 bits tous les 120 jours sans interruption de service.
Ce guide s'adresse aux développeurs, DevOps, et architectes système qui cherchent à intégrer Mailgun pour l'email transactionnel avec une compréhension complète de l'infrastructure : configuration DNS, choix API vs SMTP, gestion des IP dédiées, limites techniques, et webhooks d'événements.
API REST vs SMTP Relay : architecture et choix d'intégration
Mailgun propose deux méthodes d'intégration pour l'email transactionnel, toutes deux disponibles dès le plan gratuit (100 emails/jour).

Comparatif technique
| Critère | API REST | SMTP Relay |
|---|---|---|
| Endpoint | https://api.mailgun.net/v3/{domain}/messages (US) | smtp.mailgun.org ports 587/465 |
| Authentification | HTTP Basic Auth (api:YOUR_API_KEY) | SASL/PLAIN (postmaster@ + SMTP password) |
| Rate limit | Non documenté (Domains API : 300 req/min) | Dépend de l'IP et du plan |
| Destinataires/req | Jusqu'à 1 000 (to + cc + bcc combinés) | 1 email = 1 connexion SMTP |
| Templates | Variables avec syntaxe {{variable}} | Via header X-Mailgun-Variables |
| Scheduling | o:deliverytime (jusqu'à 3 jours, 7j si stockage 7j+) | Via header X-Mailgun-Deliver-By |
| Tracking | Natif (o:tracking, o:track-clicks, o:track-opens) | Via headers X-Mailgun-Track* |
| Compatibilité | Requiert SDK ou HTTP client | Tout système supportant SMTP |
| Cas d'usage idéal | Apps modernes, batch, personnalisation avancée | Legacy, plugins CMS, serveurs mail |
Quand choisir l'API REST ?
L'API REST est la méthode recommandée par Mailgun pour toute nouvelle intégration. Elle est accessible à POST https://api.mailgun.net/v3/{domain}/messages pour la région US, ou api.eu.mailgun.net pour l'EU.
Avantages clés :
- Batch sending : envoi de jusqu'à 1 000 destinataires dans une seule requête avec personnalisation via recipient variables
- Templates stockés : syntaxe Handlebars avec conditions, boucles, helpers personnalisés
- Scheduling : programmation d'envoi jusqu'à 3 jours à l'avance (7 jours si votre plan inclut 7+ jours de stockage)
- Rate limit headers :
X-RateLimit-Limit,X-RateLimit-Remaining,X-RateLimit-Resetpour monitoring
Exemple d'envoi avec personnalisation :
curl -s --user 'api:YOUR_API_KEY' \
https://api.mailgun.net/v3/mail.captaindns.com/messages \
-F from='Notifications <no-reply@mail.captaindns.com>' \
-F to='user1@captaindns.com' \
-F to='user2@captaindns.com' \
-F subject='Nouvelle notification' \
-F text='Bonjour {{prenom}}, vous avez {{count}} notifications.' \
-F recipient-variables='{"user1@captaindns.com":{"prenom":"Jean","count":"3"},"user2@captaindns.com":{"prenom":"Marie","count":"7"}}' \
-F o:tag='notification' \
-F o:tracking='yes'
SDKs officiels : Mailgun maintient des SDKs pour Go, Node.js, PHP, Python, Ruby et Java qui encapsulent l'API REST et simplifient l'intégration.
Quand choisir le SMTP Relay ?
Le SMTP Relay est idéal pour les systèmes legacy ou les applications ne supportant que SMTP.
Configuration officielle :
SMTP server: smtp.mailgun.org (US) ou smtp.eu.mailgun.org (EU)
SMTP user: postmaster@mail.captaindns.com (ou utilisateur SMTP personnalisé)
SMTP password: [mot de passe SMTP du domaine]
Port: 587 (STARTTLS recommandé) ou 465 (TLS direct) ou 2525 (fallback GCE)
Point critique : l'authentification SMTP utilise le mot de passe SMTP du domaine, distinct de la clé API. Le username est l'adresse postmaster@ de votre domaine vérifié (ou un utilisateur SMTP personnalisé créé dans le dashboard).
Headers propriétaires X-Mailgun-* : permettent d'accéder aux fonctionnalités avancées via SMTP (tags, tracking, templates, scheduling, variables). Liste complète :
X-Mailgun-Tag: tag pour statistiques (multiples possibles)X-Mailgun-Track: activer/désactiver tracking globalX-Mailgun-Track-Clicks: tracking clics (yes/no/htmlonly)X-Mailgun-Track-Opens: tracking ouvertures (yes/no)X-Mailgun-Deliver-By: planification (format RFC 2822 ou timestamp Unix)X-Mailgun-Template-Name: nom du template à utiliserX-Mailgun-Variables: variables template (JSON)
Domain Verification : SPF, DKIM 2048 bits et alignement DMARC natif
La configuration DNS chez Mailgun génère les enregistrements nécessaires pour SPF, DKIM et l'alignement DMARC. Le processus s'effectue dans Sending > Domains > Domain settings > Domain verification.
Architecture avec Automatic Sender Security (recommandé)
Avec l'option Automatic Sender Security activée (recommandé), Mailgun génère 2 enregistrements CNAME DKIM pour la rotation automatique des clés :

Enregistrements requis (exemple pour mail.captaindns.com) :
| Type | Name/Host | Value | Objectif |
|---|---|---|---|
| TXT | mail.captaindns.com | v=spf1 include:mailgun.org ~all | SPF |
| CNAME | pdk1._domainkey.mail.captaindns.com | pdk1._domainkey.XXXX.dkim1.mailgun.com | DKIM rotation (sélecteur 1) |
| CNAME | pdk2._domainkey.mail.captaindns.com | pdk2._domainkey.XXXX.dkim1.mailgun.com | DKIM rotation (sélecteur 2) |
| MX | mail.captaindns.com | mxa.mailgun.org (priorité 10) | Bounces/Inbound |
| MX | mail.captaindns.com | mxb.mailgun.org (priorité 10) | Bounces/Inbound |
Note région EU : Pour l'EU, les enregistrements MX utilisent mxa.eu.mailgun.org et mxb.eu.mailgun.org.
Avantages de cette architecture :
- Rotation automatique des clés DKIM : les deux sélecteurs (
pdk1etpdk2) permettent à Mailgun de changer les clés tous les 120 jours sans interruption de service - Clés DKIM 2048 bits par défaut (configurations manuelles TXT peuvent utiliser 1024 bits, mais 2048 recommandé)
- Aucun enregistrement CNAME de tracking requis par défaut : Mailgun utilise
mailgun.org(oueu.mailgun.orgpour l'EU) - Sélecteurs DKIM :
pdk1etpdk2pour Automatic Security, oumxpour configuration manuelle TXT
Return-Path et alignement SPF : un avantage majeur
Le Return-Path (Envelope From) est crucial pour l'alignement DMARC. Mailgun utilise automatiquement votre domaine pour le Return-Path au format bounce+UNIQUEID@mail.captaindns.com :
- SPF passe automatiquement car l'enregistrement
include:mailgun.orgautorise les IP Mailgun à envoyer pour votre domaine - L'alignement SPF fonctionne en mode relaxed (le Return-Path
bounce+id@mail.captaindns.comcorrespond au domaine parentmail.captaindns.com) - Pas besoin de configuration séparée : contrairement à d'autres providers, Mailgun ne nécessite pas de sous-domaine dédié pour le bounce domain
Différence avec les concurrents :
- SendGrid : utilise un sous-domaine personnalisable (
em1234.captaindns.com) - Amazon SES : nécessite Custom MAIL FROM pour l'alignement SPF
- Mailgun : utilise directement votre domaine vérifié
Pour une politique DMARC stricte (aspf=s), l'alignement SPF échouera si vous envoyez depuis un sous-domaine différent du Return-Path. La solution est de s'appuyer sur DKIM pour l'alignement DMARC, qui supporte le mode strict (adkim=s).
Tracking domain (link branding)
Le tracking domain remplace les domaines Mailgun dans les liens trackés par votre propre domaine. Par défaut, Mailgun utilise email.mail.captaindns.com pointant vers mailgun.org (US) ou eu.mailgun.org (EU) via CNAME.
Configuration optionnelle HTTPS : Mailgun génère automatiquement un certificat Let's Encrypt une fois le CNAME vérifié.
Migration vers DKIM 2048 bits
Pour migrer une configuration TXT manuelle (clés 1024 bits) vers Automatic Sender Security (2048 bits), il suffit d'activer Automatic Sender Security dans le dashboard puis de créer les 2 nouveaux CNAME DKIM. La transition est fluide grâce aux deux sélecteurs.
Flux d'authentification email : de l'API à la délivrabilité

Quand vous envoyez via Mailgun :
- Votre application appelle l'API REST ou utilise SMTP
- Mailgun signe le message avec votre clé DKIM (domaine
d=mail.captaindns.com) - Mailgun utilise votre domaine dans le Return-Path (
bounce+id@mail.captaindns.com) - Le serveur destinataire vérifie SPF (IP d'envoi), DKIM (signature), puis DMARC (alignement)
- SPF passe :
include:mailgun.orgautorise les IP Mailgun, Return-Path utilise votre domaine - DKIM passe : signature
d=mail.captaindns.comcorrespond au From header - DMARC passe : au moins SPF ET DKIM sont alignés (double validation)
Alignement DMARC : configuration pour p=reject
Ce qui fonctionne (et ce qui casse)
Alignement DKIM :
| Configuration | Aligné ? | DMARC via DKIM ? |
|---|---|---|
| Domaine avec DKIM activé (TXT ou CNAME) | Oui | Oui |
Alignement SPF :
| Configuration | Aligné ? | DMARC via SPF ? |
|---|---|---|
| Return-Path utilise votre domaine (natif) | Oui | Oui |
| aspf=r (relaxed, défaut) | Oui | Oui |
| aspf=s (strict) + envoi depuis sous-domaine | Non | Non (mismatch subdomain) |
Enregistrement DMARC recommandé
_dmarc.captaindns.com TXT "v=DMARC1;p=reject;adkim=r;aspf=r;rua=mailto:dmarc@captaindns.com"
Points clés :
adkim=retaspf=r: alignement relaxed (autorise les sous-domaines)- Progressez de
p=none→p=quarantine→p=reject - Surveillez les rapports
ruaavant de durcir - Avantage Mailgun : double alignement (SPF + DKIM) natif, meilleure protection qu'avec DKIM seul
Tableau récapitulatif DNS complet
| Type | Host/Name | Value | Obligatoire | Notes |
|---|---|---|---|---|
| TXT | mail.captaindns.com | v=spf1 include:mailgun.org ~all | ✅ Oui | SPF identique US/EU |
| CNAME | pdk1._domainkey.mail.captaindns.com | pdk1._domainkey.XXXX.dkim1.mailgun.com | ✅ Oui | DKIM rotation auto |
| CNAME | pdk2._domainkey.mail.captaindns.com | pdk2._domainkey.XXXX.dkim1.mailgun.com | ✅ Oui | DKIM rotation auto |
| MX | mail.captaindns.com | mxa.mailgun.org (priorité 10) | ✅ Oui | Bounces/Inbound |
| MX | mail.captaindns.com | mxb.mailgun.org (priorité 10) | ✅ Oui | Bounces/Inbound |
| TXT | _dmarc.captaindns.com | v=DMARC1;p=reject;adkim=r;aspf=r;... | Recommandé | DMARC policy |
| CNAME | email.mail.captaindns.com | mailgun.org ou eu.mailgun.org | Optionnel | Tracking domain |
IP dédiée vs IP partagée : stratégie de délivrabilité
Mailgun recommande officiellement une IP dédiée à partir de 1 million d'emails par mois. En dessous, l'IP partagée offre généralement une meilleure délivrabilité.
IP partagée (plans Free, Foundation, Growth de base)
Avantages :
- Aucun warm-up nécessaire
- Réputation maintenue par Mailgun
- Idéale pour volumes faibles ou irréguliers
- Meilleure délivrabilité initiale que sur IP dédiée froide
Inconvénients :
- Exposition aux risques de réputation liés aux autres expéditeurs du pool (rare chez Mailgun grâce aux contrôles stricts)
IP dédiée (Foundation 100k+, Growth, Scale, Enterprise)
Le plan Foundation 100k inclut 1 IP dédiée (à partir de 75$/mois). Chaque IP supplémentaire coûte 59$/IP/mois.
Recommandation officielle : 1 IP dédiée pour environ 1 million d'emails par mois minimum.
Avantages :
- Réputation isolée et contrôlable
- Fonction d'IP Warmup automatique sur 15 étapes (~15+ jours)
- Possibilité de séparer les flux (transactionnel vs marketing) via IP Pools
IP Warmup automatique : Mailgun propose un warm-up en 15 étapes progressives :
| Étape | Limite quotidienne | Limite horaire | Durée |
|---|---|---|---|
| 1 | 1 000 | 100 | 24h |
| 2 | 2 500 | ~100 | 24h |
| 3 | 5 000 | Progressive | 24h |
| ... | Progressive | Progressive | ... |
| 15 | Capacité totale | Sans limite | Atteint J15+ |
Le système avance d'une étape toutes les 24 heures si les limites sont atteintes. Le trafic excédentaire est automatiquement routé vers les IP partagées ou autres IP dédiées disponibles.
IP Pools : Disponibles sur les plans Scale et supérieurs. Permettent de :
- Séparer emails transactionnels vs marketing
- Différents clients/marques (multi-tenant)
- Dynamic IP Pools : assignation automatique basée sur la santé de réputation
Note importante : Les IP dédiées sont liées à une région (US ou EU). Une migration de région nécessite une nouvelle IP et un nouveau warm-up.
Quand choisir une IP dédiée ?
Vous avez besoin d'une IP dédiée si :
- Volume régulier > 1 million emails/mois
- Besoin de séparer réputation transactionnel vs marketing
- Exigences de whitelisting client ou conformité réglementaire
- Volume > 2,5 millions emails/mois : plusieurs IP dédiées recommandées
Restez sur IP partagée si :
- Volume < 1 million emails/mois
- Envois irréguliers ou sporadiques
- Démarrage d'activité sans historique
- Purement transactionnel faible volume
Tarification 2026 et évolution récente
Plans Send (janvier 2026)
| Plan | Prix/mois | Emails inclus | Overage (/1000) | Log retention | IP dédiée |
|---|---|---|---|---|---|
| Free | 0 $ | 100/jour | N/A | 1 jour | Non |
| Flex | Pay-per-use | 1 000 gratuits/mois | 2,00 $ ⚠️ | 5 jours | Non |
| Foundation 50k | 35 $ | 50 000 | ~1,30 $ | 5 jours | Non |
| Foundation 100k | 75 $ | 100 000 | ~1,30 $ | 5 jours | 1 incluse |
| Growth | 80-650 $ | 100k-1M | Variable | 15 jours | 1 incluse |
| Scale 100k | 90 $ | 100 000 | ~0,80-1,10 $ | 30 jours | 1 incluse |
| Scale (max) | 1 250 $ | 2,5M | Variable | 30 jours | 1 incluse |
| Enterprise | Sur devis | 2,5M+ | Négocié | 30 jours | Multiples |
Évolution tarifaire récente
⚠️ Changement majeur (1er décembre 2025) : Le plan Flex est passé de 1,00 $ à 2,00 $ par 1 000 emails - une augmentation de 100%. Cette hausse significative rend les plans Foundation beaucoup plus attractifs pour les volumes > 25 000 emails/mois.
Analyse économique :
- Plan Flex : 50 000 emails = 49 000 payants × 0,002 = 98 $
- Plan Foundation 50k : 50 000 emails = 35 $ (économie de 63 $)
- Seuil de rentabilité : le plan Foundation devient rentable dès ~18 000 emails/mois
Plans Optimize (outils de délivrabilité)
| Plan | Prix/mois | Validations | Tests inbox | Previews |
|---|---|---|---|---|
| Pilot | 49 $ | 2 500 | 25 | 500 |
| Starter | 99 $ | 5 000 | 50 | 1 000 |
| Contract | Sur devis | Personnalisé | Personnalisé | Personnalisé |
Réductions annuelles
Non documentées publiquement. Les clients Enterprise rapportent des remises de 10%+ négociables.
Tarification US vs EU
La tarification est standardisée mondialement en USD. Pas de différence régionale documentée entre US et EU.
Limites techniques et quotas
| Limite | Valeur | Notes |
|---|---|---|
| Taille max email | 25 MB | Corps + pièces jointes + en-têtes |
| Destinataires/message | 1 000 | To + Cc + Bcc combinés |
| Paramètres send options | 16 KB | Paramètres o:, h:, v:, t: |
| Templates/domaine | 100 | Limite stricte |
| Versions/template | 10 | - |
| Domaines (Free) | 5 | - |
| Domaines (payant) | 1 000 | - |
| Destinataires sandbox | 5 | Doivent être vérifiés |
| Rate limit Domains API | 300 req/min | Seul endpoint documenté |
| Rate limit envoi (nouveaux comptes) | 100 messages/heure | Avant vérification business |
| Scheduling max | 3 jours | 7 jours si plan avec 7j+ storage |
Rétention des données
| Donnée | Rétention |
|---|---|
| Logs événements (Free) | 1 jour |
| Logs événements (Foundation) | 5 jours |
| Logs événements (Growth) | 15 jours |
| Logs événements (Scale) | 30 jours (max) |
| Contenu messages | 1-7 jours (configurable) |
| Stats horaires | 60 jours |
| Stats quotidiennes | 1 an |
| Stats mensuelles | Indéfini |
| Logs sécurité critiques | 365 jours |
Gestion des bounces et suppressions
Hard bounce (échec permanent)
| Comportement | Détail |
|---|---|
| Action | Adresse ajoutée à la liste de suppression |
| Durée blocage | Indéfinie (jusqu'à suppression manuelle) |
| Erreur renvoyée | "Not delivering to previously bounced address" |
Soft bounce (échec temporaire)
| Comportement | Détail |
|---|---|
| Retry | Automatique pour les soft bounces immédiats |
| Durée | Jusqu'au succès ou classification permanente |
| Conversion | Après multiples échecs, ajout à la liste bounce |
Spam complaints (FBL)
Mailgun s'inscrit automatiquement aux Feedback Loops des principaux FAI. Les plaintes déclenchent :
- Ajout automatique à la liste Complaints
- Webhook
complainedenvoyé - Blocage des envois futurs vers cette adresse
FAI supportés : Yahoo, Microsoft/Outlook, Comcast, Cox, Fastmail, et autres via Universal Feedback Loop. Note : Gmail ne fournit pas de FBL traditionnel.
Unsubscribe automatique
Mailgun ajoute automatiquement :
- En-tête
List-Unsubscribe - En-tête
List-Unsubscribe-Post: List-Unsubscribe=One-Click
Conforme RFC 8058 et aux exigences Gmail/Yahoo pour les expéditeurs bulk (5000+ messages/jour).
API listes de suppression
| Liste | Endpoint |
|---|---|
| Bounces | GET/POST/DELETE /v3/{domain}/bounces |
| Complaints | GET/POST/DELETE /v3/{domain}/complaints |
| Unsubscribes | GET/POST/DELETE /v3/{domain}/unsubscribes |
| Allowlist | GET/POST/DELETE /v3/{domain}/allowlist |
L'Allowlist empêche l'ajout d'adresses à la liste bounces mais n'override pas les Complaints ou Unsubscribes.
Event Webhook et tracking en temps réel
Le webhook d'événements permet de recevoir en temps réel les notifications de delivery, engagement et compliance.
Événements disponibles
- Delivery :
accepted,delivered,temporary_fail,permanent_fail - Engagement :
opened,clicked - Compliance :
complained,unsubscribed
Format payload JSON
{
"signature": {
"timestamp": "1529006854",
"token": "a8ce0edb2dd8301dee6c2405235584e45aa91d1e9f979f3de0",
"signature": "d2271d12299f6592d9d44cd9d250f0704e4674c30d79d07c47a66f95ce71cf55"
},
"event-data": {
"event": "delivered",
"timestamp": 1529006854.329574,
"id": "DACSsAdVSeGpLid7TN03WA",
"recipient": "recipient@captaindns.com",
"tags": [],
"message": {
"headers": {
"message-id": "20180618211821.captaindns.com"
}
}
}
}
Retry policy
| Code réponse | Action |
|---|---|
| 200 | Succès, pas de retry |
| 406 | Rejeté, pas de retry |
| Autre | Retry selon planning |
Planning de retry : 5min → 10min → 15min → 1h → 2h → 4h (total : 8 heures)
Sécurité (signature HMAC)
| Élément | Valeur |
|---|---|
| Algorithme | HMAC-SHA256 |
| Clé | Webhook Signing Key (Control Panel → Account Security) |
| Calcul | HMAC-SHA256(timestamp + token, signingKey) |
Exemple Python :
import hmac, hashlib
def verify(api_key, token, timestamp, signature):
expected = hmac.new(api_key.encode(), f"{timestamp}{token}".encode(),
hashlib.sha256).hexdigest()
return signature == expected
Configuration
- Jusqu'à 3 URLs par type d'événement par domaine
- Configuration au niveau domaine (pas compte)
- API :
POST /v3/domains/{domain}/webhooks
Templates Handlebars
Mailgun utilise Handlebars (version personnalisée) pour les templates stockés.
Syntaxe des variables
| Contexte | Syntaxe |
|---|---|
| Templates stockés | {{variable}} |
| Batch sending inline (API) | %recipient.variable% |
Conditions et boucles
{{#if condition}}
Contenu si vrai
{{else if autreCondition}}
Contenu alternatif
{{else}}
Contenu par défaut
{{/if}}
{{#unless condition}}
Contenu si faux
{{/unless}}
{{#equal variable "valeur"}}
Contenu si égal
{{/equal}}
{{#each tableau}}
<li>{{this.propriete}}</li>
{{/each}}
{{#with objet}}
{{proprieteImbriquee}}
{{/with}}
Limites templates
| Limite | Valeur |
|---|---|
| Templates par domaine | 100 |
| Versions par template | 10 |
| Taille template | Non documentée |
| Partials (import) | Non supporté |
Fonctionnalités additionnelles
Email Validation API
| Attribut | Valeur |
|---|---|
| Endpoint single | GET /v4/address/validate?address=... |
| Endpoint bulk | POST /v4/address/validate/bulk/{list_id} |
| Base données | 450+ milliards d'emails |
| Tarif Foundation | 1,20 $/100 validations |
| Tarif Scale | 5 000 incluses, puis 0,80 $/100 |
Validations effectuées : syntaxe RFC, MX records, existence mailbox, bounces réseau Mailgun, adresses à risque, adresses role-based, emails jetables, typos domaine, domaines catch-all.
Inbound Parse (Routes)
Permet de recevoir des emails et les transférer vers une URL webhook :
Filtres : match_recipient(), match_header(), catch_all()
Actions : forward("https://url"), forward("email@"), store(), stop()
Retry inbound : jusqu'à 8 heures (10min, 15min, 30min, 1h, 2h, 4h) Rétention messages stockés : 3 jours
Attachments
| Limite | Valeur |
|---|---|
| Taille totale message | 25 MB (corps + attachments + headers) |
| Types fichiers | Aucune restriction documentée |
| Inline (CID) | Supporté via paramètre inline |
AMP for Email
Supporté depuis 2019 via le paramètre amp-html. Nécessite :
- Enregistrement comme expéditeur AMP auprès de Google
- SPF, DKIM, DMARC configurés
- Fallback HTML obligatoire
Sécurité et conformité
Certifications
| Certification | Statut |
|---|---|
| ISO 27001 | ✅ Certifié |
| ISO 27701 | ✅ Certifié (privacy) |
| SOC 2 Type I | ✅ Certifié |
| SOC 2 Type II | ✅ Certifié |
| SOC 1 (SSAE-16) | ✅ Certifié |
| PCI-DSS | ✅ Conforme (SAQ-A) |
| CSA Star Level 1 | ✅ Conforme |
RGPD
| Élément | Détail |
|---|---|
| DPA | Disponible : mailgun.com/legal/dpa/ |
| Localisation données EU | Allemagne |
| Endpoints EU | api.eu.mailgun.net, smtp.eu.mailgun.org |
| Résidence données | Messages jamais transférés hors région |
| DPO | Dédié, basé en EU |
HIPAA
| Élément | Détail |
|---|---|
| Statut | ✅ Conforme |
| BAA | Disponible : mailgun.com/legal/hipaa-baa/ |
| Prérequis | Configuration chiffrement client, consentement patient, signature BAA |
Chiffrement TLS
| Version | Statut |
|---|---|
| TLS 1.0 | ❌ Déprécié (mars 2021) |
| TLS 1.1 | ❌ Déprécié (mars 2021) |
| TLS 1.2 | ✅ Supporté |
| TLS 1.3 | ✅ Supporté |
Chiffrement au repos : AES-256
Authentification avancée
| Fonctionnalité | Disponibilité |
|---|---|
| 2FA | ✅ Tous les plans |
| SSO | ✅ Scale et Enterprise |
| SAML 2.0 | ✅ Scale et Enterprise |
| IdP supportés | Okta, Auth0, OneLogin, Azure AD, ADFS, AWS IAM |
| RBAC | ✅ Scale et Enterprise (Admin, Developer, Analyst, Support) |
Plan d'action : configuration en 6 étapes
1. Créer le compte et configurer le domaine
- Créer un compte Mailgun sur mailgun.com/signup
- Choisir la région (US ou EU selon vos besoins RGPD)
- Un domaine sandbox est créé automatiquement (100 emails/jour)
2. Vérifier le domaine (Domain Verification)
- Aller dans Sending > Domains > Add New Domain
- Saisir votre domaine d'envoi (ex:
mail.captaindns.com) - Activer Automatic Sender Security (recommandé)
- Créer les enregistrements DNS chez votre registrar :
- TXT SPF :
v=spf1 include:mailgun.org ~all - CNAME DKIM pdk1 :
pdk1._domainkey.mail.captaindns.com - CNAME DKIM pdk2 :
pdk2._domainkey.mail.captaindns.com - MX mxa :
mxa.mailgun.org(priorité 10) - MX mxb :
mxb.mailgun.org(priorité 10)
- TXT SPF :
- Vérifier la propagation DNS (24-48h)
3. Publier l'enregistrement DMARC
Créer l'enregistrement DMARC sur votre domaine principal :
_dmarc.captaindns.com TXT "v=DMARC1;p=none;rua=mailto:dmarc@captaindns.com;aspf=r;adkim=r"
Commencer par p=none pour monitoring, puis passer à p=quarantine puis p=reject une fois les rapports validés.
4. Choisir et configurer la méthode d'envoi
Option A : API REST
- Générer une API key dans Settings > API Keys
- Choisir les permissions (Full Access ou Domain sending keys pour scope limité)
- Implémenter l'endpoint
POST /v3/{domain}/messages - Créer des templates dans Sending > Templates si besoin
Option B : SMTP Relay
- Récupérer le mot de passe SMTP du domaine dans Sending > Domains > Domain settings > SMTP credentials
- Configurer votre app/plugin/serveur mail :
- Host :
smtp.mailgun.org(US) ousmtp.eu.mailgun.org(EU) - Port :
587(STARTTLS recommandé) - User :
postmaster@mail.captaindns.com - Password : le mot de passe SMTP du domaine
- Host :
5. Configurer les webhooks
- Aller dans Sending > Webhooks
- Définir l'URL de votre endpoint (HTTPS recommandé)
- Sélectionner les événements (delivered, bounced, opened, clicked, etc.)
- Récupérer la Webhook Signing Key pour valider les signatures HMAC
6. Tester et monitorer
- Envoyer un email test via API ou SMTP
- Vérifier dans Sending > Logs que l'email est bien délivré
- Vérifier les événements webhook sur votre endpoint
- Contrôler les statistiques (deliverability, open rate, bounce rate)
- Pour passer en production, sortir du mode sandbox en contactant le support Mailgun (vérification business)
Guides techniques : autres plateformes email transactionnel
Decouvrez nos guides complets pour les autres solutions d'email transactionnel :
- Postmark : configuration DKIM et API REST - Specialiste delivrabilite, DKIM 1024 bits, Message Streams
- SendGrid : authentification domaine et Web API v3 - DKIM 2048 bits avec rotation, IP dediee des 50k/mois
- Amazon SES : Easy DKIM et Custom MAIL FROM - 0.10$/1000 emails, 7 regions EU
- Mailjet : API v3.1 et configuration DKIM - DKIM 2048/4096 bits, acquisition Sinch
- Mandrill : integration Mailchimp transactional - Prerequis Mailchimp Standard, blocs 25k emails
- Brevo : configuration DKIM et SPF - 300 emails/jour gratuits, DKIM TXT ou CNAME
FAQ
Quelle différence entre clé API primaire et Domain Sending Keys ?
La clé API primaire (Primary Account API Key) donne accès CRUD complet à toutes les API du compte. Les Domain Sending Keys sont limitées à l'envoi uniquement (POST /messages) pour un domaine spécifique. Utilisez les Domain Sending Keys dans vos apps pour limiter la surface d'attaque en cas de compromission.
Pourquoi Mailgun génère-t-il deux sélecteurs DKIM (pdk1 et pdk2) ?
Les deux sélecteurs permettent la rotation automatique des clés DKIM tous les 120 jours sans interruption de service. Lorsque Mailgun veut renouveler les clés pour des raisons de sécurité, il génère une nouvelle clé sur pdk2 pendant que pdk1 est encore actif, puis bascule progressivement le trafic. Cela évite toute interruption de délivrabilité lors du changement de clé.
Dois-je configurer un Custom MAIL FROM comme avec Amazon SES ?
Non, contrairement à Amazon SES qui nécessite Custom MAIL FROM pour l'alignement SPF, Mailgun utilise automatiquement votre domaine vérifié dans le Return-Path (bounce+id@mail.captaindns.com). L'alignement SPF DMARC fonctionne nativement dès la configuration du domaine, sans configuration séparée.
Comment fonctionne le mode test sans consommer de crédits ?
Utilisez le paramètre o:testmode=yes (API) ou le header X-Mailgun-Drop-Message: yes (SMTP). Les messages sont acceptés mais non délivrés, générant un événement delivered avec code 650. Idéal pour tester la structure des requêtes et le format des payloads sans envoyer réellement d'emails.
Quelle est la limite réelle de destinataires par appel API ?
1 000 destinataires maximum par appel (to + cc + bcc combinés). Au-delà, diviser en plusieurs appels. Pour envoyer à 10 000 personnes, il faut 10 appels API. Utilisez les recipient variables pour personnaliser le contenu de chaque destinataire dans un même batch.
Le plan Flex est-il adapté pour de la production à volume variable ?
Depuis le doublement du tarif (2,00$/1000 emails en décembre 2025), le plan Flex est devenu moins compétitif. Pour plus de 18 000 emails/mois, le plan Foundation 50k (35$/mois) est plus rentable. Flex reste intéressant pour des volumes très faibles et irréguliers (< 10 000/mois) ou pour tester avant de s'engager.
Dois-je prendre une IP dédiée pour mon projet ?
Probablement non. Une IP dédiée nécessite un volume minimum de 1 million d'emails par mois, avec des envois réguliers. Elle impose un warm-up de 15+ jours et coûte 59$/IP/mois supplémentaire (ou incluse dès Foundation 100k). Si votre volume est inférieur ou si vos envois sont irréguliers, restez sur IP partagée. La réputation Mailgun sur IP partagée est excellente.
Les rate limits API sont-ils documentés ?
Non, Mailgun ne documente pas publiquement les rate limits spécifiques par endpoint, sauf pour l'API Domains (300 req/min). Les nouveaux comptes peuvent être limités à 100 messages/heure avant vérification business. Les headers X-RateLimit-* dans les réponses indiquent votre quota en temps réel. En cas de 429, implémenter un backoff exponentiel.
Glossaire
-
API REST : API HTTP de Mailgun pour l'envoi d'emails transactionnels. Endpoint principal :
POST /v3/{domain}/messages. Authentification : HTTP Basic Auth (api:YOUR_API_KEY). Méthode recommandée pour toute nouvelle intégration. -
SMTP Relay : Serveur SMTP de Mailgun (
smtp.mailgun.org) permettant d'envoyer via le protocole SMTP standard. Authentification : SASL/PLAIN (postmaster@ + SMTP password). Ports disponibles : 587 (STARTTLS), 465 (TLS direct), 2525 (fallback GCE). -
Domain Verification : Configuration DNS pour authentifier votre domaine avec Mailgun. Génère les enregistrements SPF, DKIM, MX. Avec Automatic Sender Security : 2 CNAME DKIM (pdk1 et pdk2) pour rotation automatique tous les 120 jours, clés 2048 bits par défaut.
-
Return-Path (Envelope From) : Adresse technique utilisée pour le routage SMTP et les bounces. Mailgun utilise automatiquement votre domaine (
bounce+id@mail.captaindns.com), permettant l'alignement SPF relaxed pour DMARC sans configuration séparée. Différence majeure avec SendGrid (sous-domaineem1234) et Amazon SES (Custom MAIL FROM requis). -
Automatic Sender Security : Option recommandée pour Domain Verification. Génère 2 CNAME DKIM au lieu de TXT, permet la rotation automatique des clés DKIM tous les 120 jours, et utilise clés 2048 bits par défaut.
-
Recipient Variables : Mécanisme pour personnaliser le contenu de chaque destinataire dans un envoi batch. Syntaxe :
%recipient.variable%dans le message, avec un JSON mappant chaque email à ses variables. Permet d'envoyer jusqu'à 1 000 versions personnalisées en un seul appel API. -
IP Warmup : Processus automatique de montée en charge d'une IP dédiée neuve. Calendrier sur 15 étapes : de 1 000 emails/jour (J1) à capacité totale (J15+). Le système avance d'une étape toutes les 24h si les limites sont atteintes. Le trafic excédentaire est routé vers les IP partagées.
-
IP Pools : Groupes d'IP dédiées assignables à différents flux (transactionnel vs marketing, par client, par marque). Disponibles sur plans Scale et Enterprise. Permettent de séparer la réputation. Dynamic IP Pools : assignation automatique basée sur la santé de réputation.
-
Event Webhook : Endpoint HTTP appelé par Mailgun lors d'événements (accepted, delivered, opened, clicked, bounced, complained, unsubscribed). Configuration : jusqu'à 3 URLs par type d'événement. Retry pendant 8h en cas d'échec. Sécurité : signature HMAC-SHA256.
-
Handlebars : Langage de templating utilisé par Mailgun pour les templates stockés. Supporte variables
{{variable}}, conditions{{#if}}, boucles{{#each}}, helpers{{#equal}}. Limite : 100 templates par domaine, 10 versions par template. Pas de support des partials. -
Sandbox Mode : Mode test qui valide le format des requêtes sans envoyer réellement d'email. Active via
o:testmode=yes(API) ouX-Mailgun-Drop-Message: yes(SMTP). Génère un événementdeliveredavec code 650. Ne consomme pas de crédits. Limite : 5 destinataires vérifiés. -
Suppressions : Listes de blocage maintenues automatiquement par Mailgun (Bounces, Complaints, Unsubscribes). Les adresses sont supprimées indéfiniment par défaut. Gestion via API :
GET/POST/DELETE /v3/{domain}/{bounces|complaints|unsubscribes}. Allowlist : empêche l'ajout à Bounces mais n'override pas Complaints/Unsubscribes. -
Domain Sending Keys : Clés API limitées à l'envoi uniquement (POST /messages) pour un domaine spécifique. Contrairement à la clé API primaire (accès CRUD complet), elles réduisent la surface d'attaque. Recommandées pour les apps en production.
-
RBAC API Keys (Scale+) : Clés API avec rôles prédéfinis : Admin (lecture/écriture complète), Developer (accès technique complet), Analyst (lecture seule métriques), Support (lecture + gestion suppressions). Disponibles sur plans Scale et Enterprise uniquement.


