guide · API Mailgun
Comment une équipe produit doit-elle implémenter l’API Mailgun en toute sécurité ?
Implémentez l’API Mailgun derrière un worker serveur autorisé. Vérifiez le domaine d’envoi exact, utilisez l’identifiant API le plus restreint disponible, créez une tâche d’envoi interne persistée et soumettez des données de formulaire multipart à l’endpoint Messages propre au domaine. Stockez l’identifiant de message renvoyé par Mailgun, authentifiez les requêtes de webhook avant de les traiter, dédupliquez les événements et appliquez les bounces, plaintes et désinscriptions au moment de l’envoi. Traitez l’acceptation par l’API, le traitement par Mailgun, la livraison au serveur destinataire et l’arrivée en boîte de réception comme des états distincts.
Définir une opération produit précise avant d’appeler Mailgun
Partez d’un événement produit approuvé, comme la vérification d’un compte, un reçu, une alerte de sécurité ou une notification demandée par le destinataire. Placez Mailgun derrière un service applicatif de confiance ou un worker de file d’attente, plutôt que d’exposer un identifiant du fournisseur ou un formulaire de message arbitraire aux navigateurs et aux clients mobiles. Autorisez l’appelant, le tenant, l’identité d’expéditeur, le destinataire, la catégorie de message et le modèle avant de construire les champs destinés au fournisseur. Persistez un enregistrement sortant interne avec une clé d’événement stable, le tenant, la révision du modèle, les adresses approuvées et l’état initial. Cet enregistrement est le système de référence pour les décisions ; Mailgun est la dépendance de transport. Séparer l’intention métier des payloads du fournisseur sécurise les nouvelles tentatives et les audits, et préserve la possibilité d’une migration ultérieure. Le trafic transactionnel et le trafic soumis au consentement doivent rester distincts dans le modèle de données, afin que les préférences des destinataires, les règles de suppression et les incidents de réputation ne deviennent pas une simple convention informelle de modèles.
Vérifier le domaine d’envoi exact et les enregistrements DNS
Ajoutez un domaine contrôlé par l’organisation et publiez les enregistrements DNS que Mailgun fournit actuellement pour la vérification, l’authentification, le suivi et les fonctions de réception effectivement choisies. Examinez les enregistrements SPF et DMARC existants avant de modifier le DNS. Ne créez pas de second enregistrement SPF sur un même nom d’hôte et ne remplacez pas une politique DMARC organisationnelle sans l’accord de son responsable. Vérifiez l’identité From et de signature réellement utilisée par la charge de travail, et pas seulement un domaine parent voisin. Utilisez un sous-domaine dédié lorsque la responsabilité, la séparation du trafic ou une migration le justifient. Une fois que Mailgun signale la vérification, inspectez un message reçu contrôlé : adresse From visible, domaine de signature DKIM, return path, résultats d’authentification et comportement des réponses. La vérification par le fournisseur prouve que son contrôle de configuration a réussi. Elle ne prouve ni le consentement des destinataires, ni l’acceptation par la destination, ni la réputation d’expéditeur, ni l’arrivée en boîte de réception. Conservez l’historique des changements DNS et les instructions de retour arrière en dehors du tableau de bord du fournisseur.
Utiliser des identifiants à portée limitée et le bon endpoint régional
Mailgun documente l’authentification HTTP Basic pour ses API, avec des identifiants API qui diffèrent selon leur pouvoir et leur usage. Un worker d’envoi ne doit recevoir que l’identifiant nécessaire au domaine et à l’opération approuvés. Séparez les clés principales du compte, les clés d’envoi par domaine, le secret de signature des webhooks et les identifiants des environnements inférieurs. Stockez les secrets directement dans un magasin de secrets géré et ne les exposez qu’au processus serveur qui en a besoin. Ne placez jamais d’identifiants dans le code client, le contrôle de version, les URL, les logs, les outils d’analyse, les modèles, les tickets ou les prompts. Choisissez l’URL de base de l’API documentée pour la région du compte au lieu de supposer que tous les domaines utilisent le même hôte. Répétez la rotation : créez un remplaçant de portée équivalente, mettez à jour le worker, vérifiez le trafic contrôlé et les événements, puis révoquez l’ancien identifiant. Déclenchez des alertes sur les échecs d’authentification et d’autorisation inattendus, car ils peuvent signaler une révocation, une mauvaise région, une dérive de portée ou une fuite.
Construire une requête Messages API persistée unique
L’endpoint Messages de Mailgun, propre au domaine, accepte des champs de formulaire multipart pour l’expéditeur, les destinataires, l’objet, le contenu texte ou HTML, ainsi que des options documentées comme les modèles, les pièces jointes, les en-têtes, les tags, les variables par destinataire, le suivi et la livraison planifiée. N’exposez que le sous-ensemble dont le produit a besoin. Validez la syntaxe des adresses et leur appartenance au tenant, bornez le nombre de destinataires et de pièces jointes, rejetez l’injection de sauts de ligne et générez les modèles approuvés avec des variables typées. Ne placez ni secrets ni données personnelles superflues dans les tags, les variables personnalisées ou les en-têtes, car les événements du fournisseur et les vues d’activité peuvent exposer les métadonnées séparément du contenu du message. Soumettez depuis la tâche interne réclamée et stockez l’identifiant de message renvoyé par Mailgun avec la tentative exacte. Gardez les noms d’options propres au fournisseur dans un seul adaptateur. Le code métier doit recevoir un résultat restreint (accepté, rejeté ou incertain) plutôt que connaître chaque champ et chaque forme d’erreur de Mailgun.
Concevoir les nouvelles tentatives autour de l’acceptation et de l’ambiguïté
Classez les réponses avant de réessayer. Corrigez les champs malformés, les domaines non autorisés, les identifiants invalides, les échecs de permission et les erreurs de politique définitives au lieu de les rejouer. Réessayez les échecs de transport admissibles, les erreurs serveur du fournisseur et les requêtes soumises à une limite de débit avec un backoff exponentiel, de la gigue, un nombre fini de tentatives et des limites d’ancienneté de file d’attente. Une réponse d’acceptation de l’API Mailgun signifie que le fournisseur a accepté la demande de soumission pour traitement ; elle ne prouve pas que le serveur de destination a accepté le message. Un timeout côté client est ambigu, car Mailgun a peut-être accepté la requête alors que le worker n’a pas reçu la réponse. Laissez cette tâche à l’état inconnu, recherchez les données de corrélation stockées ou des événements ultérieurs, et appliquez une règle de rapprochement délibérée avant de renvoyer. Le transport Mailgun ne dispense pas d’une clé d’événement applicatif stable, d’une réclamation par un seul worker, d’un historique des tentatives et de contrôles du risque de doublon. Déclenchez des alertes sur les échecs répétés par identifiant, domaine, modèle, tenant et fournisseur de destination.
Authentifier les requêtes de webhook avant de les analyser
Configurez un endpoint de webhook HTTPS et conservez tels quels les champs utilisés par la procédure de signature de Mailgun. Mailgun documente un timestamp, un token et une signature calculée avec la clé de signature des webhooks. Validez la signature à l’aide d’une comparaison à temps constant et rejetez les timestamps hors de la fenêtre de fraîcheur de l’application avant d’accepter l’événement. Suivez les tokens ou les identifiants d’événements si nécessaire pour résister au rejeu. Gardez la clé de signature des webhooks séparée des identifiants d’envoi et faites-la tourner selon un processus testé. Appliquez des limites de taille aux requêtes et ne faites pas confiance aux URL, destinataires, tags ou champs d’événement simplement parce que le corps s’analyse correctement. Après l’authentification, stockez ou mettez en file d’attente l’événement de façon durable avant de renvoyer un succès. Cela évite qu’un plantage du processus ne fasse disparaître des preuves de livraison. La vérification du webhook prouve l’origine et l’intégrité avec le secret configuré ; elle ne prouve pas que l’événement métier appartient au tenant attendu tant que l’application n’a pas rapproché le domaine et les identifiants de message du fournisseur.
Gérer de façon idempotente les nouvelles tentatives de webhook et les événements en double
Mailgun documente le comportement de renvoi des webhooks lorsqu’un endpoint ne renvoie pas la réponse de succès attendue. Le récepteur doit s’attendre à des livraisons différées et répétées. Dédupliquez sur un identifiant d’événement stable du fournisseur lorsqu’il existe, ou sur une clé composite prudente qui ne peut pas fusionner des destinataires ou des types d’événements différents. Conservez séparément l’heure de survenue d’origine et l’heure de traitement. Rendez les transitions d’état monotones, afin qu’une observation plus ancienne (accepté ou délivré) ne puisse pas effacer un échec définitif, une plainte ou une désinscription ultérieurs simplement parce que les renvois arrivent dans le désordre. Ne renvoyez un succès qu’après une capture durable, mais gardez le traitement métier coûteux asynchrone pour que l’endpoint reste fiable. Surveillez les échecs de signature, la latence des réponses, le volume de renvois, le retard des événements et les enregistrements en dead-letter. Ne conservez les payloads bruts du fournisseur qu’aussi longtemps que les besoins opérationnels et réglementaires le justifient, avec un accès restreint et une minimisation des adresses. Un webhook est un flux de preuves, pas une autorisation d’exposer l’historique des destinataires d’un tenant à l’autre.
Modéliser les événements Mailgun sans surestimer la livraison
Mailgun documente des types d’événements pour accepted, delivered, les échecs temporaires et définitifs, opened, clicked, unsubscribed, complained, stored et d’autres résultats de traitement associés. Associez ces noms à un modèle interne tout en conservant le type d’événement du fournisseur, l’identifiant de message, le périmètre des destinataires, l’horodatage, la gravité et la réponse SMTP disponible. Accepted décrit la prise en charge par Mailgun ou la progression dans sa file d’attente. Delivered décrit l’observation de livraison documentée, généralement l’acceptation par le serveur de destination, mais ne révèle pas le dossier final dans la boîte aux lettres. Les ouvertures et les clics relèvent de l’instrumentation de l’engagement, pas d’une preuve de transport, et les technologies de protection de la vie privée peuvent les fausser. Les échecs temporaires peuvent justifier des nouvelles tentatives bornées au sein du système de transport ; les échecs définitifs, les plaintes et les désinscriptions doivent mettre à jour l’état de protection des destinataires avant la soumission de toute tâche applicative ultérieure. Gardez le registre des événements en ajout seul et dérivez le statut affiché aux utilisateurs au moyen de règles explicites, afin que le support puisse distinguer la preuve de l’interprétation.
Appliquer les échecs, plaintes et désinscriptions au moment de l’envoi
Mailgun documente le suivi des échecs de livraison, des plaintes pour spam et des désinscriptions. Intégrez ces signaux dans un modèle de protection des destinataires détenu par le produit, avec le tenant, l’adresse, la catégorie de message, l’événement source, le motif et la date d’effet. Vérifiez cet état juste avant chaque envoi, et pas seulement lors de l’import d’une liste de campagne. Un bounce définitif ou une plainte doit bloquer les nouvelles tentatives à risque pour le périmètre concerné. Le traitement des désinscriptions doit respecter la catégorie de message et les exigences actuelles des destinataires ou de la loi ; il ne doit pas être contourné régulièrement via les options du fournisseur. Protégez toute levée manuelle par une autorisation forte, un motif visible et un historique d’audit. Les données de suppression du fournisseur sont une preuve opérationnelle précieuse, mais ne constituent pas un registre de consentement complet. Conservez séparément la source du consentement, les préférences, les décisions de politique critiques pour le produit et l’historique antérieur du fournisseur, afin qu’une migration ne fasse pas disparaître la protection des destinataires. Testez la propagation des suppressions, les plaintes en double, les bounces différés et les réactivations exceptionnelles avec des identités contrôlées.
Envisagez SendHQ comme alternative à Mailgun
SendHQ propose des e-mails transactionnels et du marketing par e-mail avec consentement, avec l’envoi depuis un domaine vérifié, les e-mails entrants, les événements de livraison et les suppressions. Examinez sa documentation d’API publique et testez l’authentification, les payloads, les erreurs, les identifiants, les événements, les domaines et les workflows de sécurité des destinataires avant de migrer.
Questions fréquentes
Quel endpoint permet d’envoyer des e-mails via l’API Mailgun ?
Mailgun documente un endpoint propre au domaine, `POST /v3/{domain}/messages`, qui utilise des données de formulaire multipart et l’authentification HTTP Basic. Ne l’appelez que depuis du code côté serveur autorisé.
Faut-il placer une clé API Mailgun dans le code du navigateur ?
Non. Stockez l’identifiant adapté le plus restreint dans un gestionnaire de secrets côté serveur. Séparez les droits liés à la production, aux environnements inférieurs, à l’administration du compte, à l’envoi par domaine et à la signature des webhooks.
L’acceptation par l’API Mailgun signifie-t-elle qu’un e-mail a été délivré ?
Non. Elle signifie que Mailgun a accepté la soumission pour traitement. Des événements authentifiés peuvent ensuite signaler la livraison au serveur de destination ou un échec, tandis que l’arrivée en boîte de réception reste un résultat distinct, côté destinataire.
Comment authentifier les webhooks Mailgun ?
Validez le timestamp, le token et la signature documentés par Mailgun avec la clé de signature des webhooks avant tout traitement. Appliquez des contrôles de fraîcheur et de rejeu, puis capturez durablement l’événement avant d’en accuser réception.
Faut-il réessayer chaque échec de l’API Mailgun ?
Non. Corrigez les erreurs de validation, d’authentification, de domaine, de permission et de politique définitives. Utilisez un backoff borné pour les échecs transitoires admissibles et rapprochez les timeouts ambigus avant de renvoyer.
SendHQ peut-il remplacer Mailgun ?
Peut-être. SendHQ propose des e-mails transactionnels et du marketing par e-mail avec consentement, avec l’envoi depuis un domaine vérifié, les e-mails entrants, les événements de livraison et les suppressions. Examinez sa documentation d’API publique et testez votre intégration avant de migrer.
Sources
- API Messages de Mailgun — Mailgun
- Authentification de l’API Mailgun — Mailgun
- Vérifier un domaine Mailgun — Mailgun
- Types d’événements Mailgun — Mailgun
- Sécuriser les webhooks Mailgun — Mailgun
- Renvois des webhooks Mailgun — Mailgun
- Suivre les échecs de livraison Mailgun — Mailgun
- Suivre les plaintes pour spam Mailgun — Mailgun
- Suivre les désinscriptions Mailgun — Mailgun
- RFC 5321 : Simple Mail Transfer Protocol — RFC Editor
- Contrat OpenAPI de SendHQ — SendHQ