Skip to content
Engineering

Adresse Email avec Domaine Personnalisé : Configuration pour les Tests de Flux

| | 10 min de lecture
Adresse Email avec Domaine Personnalisé : Configuration pour les Tests de Flux
Email Address With Custom Domain: Setup for Testing Flows

Les flux de test dépendants d’email sont où “ça marche sur ma machine” va mourir. L’email arrive en retard, atterrit dans la mauvaise boîte, est renvoyé, ou provient d’un fournisseur qui ne livre qu’aux domaines autorisés. Si vous construisez de l’automatisation QA ou des agents pilotés par LLM qui doivent compléter des inscriptions, des réinitialisations de mot de passe, ou des connexions par lien magique, une adresse email avec domaine personnalisé est souvent le moyen le plus simple de rendre ces flux déterministes et compatibles avec l’entreprise.

Ce guide présente une configuration pratique : choisir un layout de domaine sûr, configurer le DNS, choisir un schéma d’adressage qui évolue bien en CI, puis consommer les messages entrants d’une manière fiable pour l’automatisation et sûre pour les agents.

Pour les détails d’intégration spécifiques à Mailhook (endpoints, payloads, signatures de webhook), utilisez la référence canonique sur llms.txt.

Ce qu’une “adresse email avec domaine personnalisé” signifie pour les tests

Dans l’automatisation de tests, l’exigence clé n’est pas “une interface de boîte mail”. C’est une adresse routable que vous contrôlez, soutenue par une API que votre code peut interroger.

Un modèle typique ressemble à ceci :

  • Vous possédez un domaine (ou sous-domaine) comme qa-mail.exemple.com.
  • Vous pointez les enregistrements MX de ce domaine vers un fournisseur d’email entrant.
  • Chaque exécution de test crée des destinataires uniques sous ce domaine (pour l’isolation).
  • Votre exécuteur de tests ou agent reçoit les emails entrants comme données structurées (idéalement JSON), et extrait un artefact minimal (OTP ou URL de vérification).

Si vous comparez d’abord les stratégies de domaine, voir Domaines Email pour les Tests : Partagés vs Personnalisés.

Quand un domaine personnalisé vaut l’effort

Un domaine partagé est excellent pour les démarrages rapides, mais un domaine personnalisé devient important quand vous avez besoin d’un contrôle que les fournisseurs externes reconnaissent.

Une configuration de domaine personnalisé est généralement justifiée quand :

  • Un fournisseur SaaS, client, ou IdP exige l’autorisation de domaine.
  • Vous avez besoin d’une forte isolation entre environnements (dev, staging, prod-like) et entre les fragments CI parallèles.
  • Vous voulez moins de surprises de délivrabilité causées par le trafic d’autres locataires.
  • Vous avez besoin de règles de routage prévisibles (catch-all, tables d’alias, ou parties locales encodées) sans collisions.

La configuration, en un coup d’œil

Vous pouvez penser au travail en trois couches : routage DNS, mappage de destinataire, et consommation de messages.

Couche Ce que vous configurez Pourquoi c’est important pour les tests
DNS (routage de domaine) Enregistrements MX pour votre domaine ou sous-domaine Assure que l’email entrant est livrable à votre système
Adressage (mappage de destinataire) Comment vous générez des destinataires uniques par exécution/tentative Évite les collisions et rend la corrélation déterministe
Récupération (interface d’automatisation) Webhooks et/ou polling retournant du JSON structuré Élimine le scraping HTML fragile et réduit l’instabilité

Diagramme d’architecture simple montrant un expéditeur tiers livrant aux enregistrements MX d’un domaine personnalisé, routé dans l’ingestion Mailhook, puis livré à un exécuteur de test ou agent LLM via webhook et un fallback de polling, se terminant par un extracteur d’artefact qui produit un OTP ou lien de vérification.

Étape 1 : Choisir un layout de domaine qui ne vous posera pas de problèmes plus tard

La plupart des équipes devraient éviter d’utiliser le domaine apex (comme exemple.com) pour le routage de boîte de test. Au lieu de cela, créez un sous-domaine dédié qui communique l’intention et supporte la séparation.

Motifs pratiques :

  • qa-mail.exemple.com pour un domaine de boîte QA partagé
  • staging-mail.exemple.com pour les flux staging uniquement
  • mail.dev.exemple.com si vous voulez une imbrication d’environnement

Cela vous donne :

  • Rayon d’explosion plus sûr (vous pouvez supprimer ou changer des enregistrements sans impacter l’email corporatif réel).
  • Guidage d’autorisation clair pour les tiers (“autoriser qa-mail.exemple.com”).
  • Nettoyage et rotation plus faciles si vous migrez plus tard de fournisseurs.

Étape 2 : Pointer les enregistrements MX vers votre fournisseur entrant

La livraison SMTP entrante est contrôlée par les enregistrements MX. Quand un expéditeur essaie de livrer du courrier à [email protected], leur serveur de courrier cherche les enregistrements MX pour qa-mail.exemple.com et se connecte au fournisseur listé.

Que faire :

  • Dans votre fournisseur DNS, créez les enregistrements MX que votre fournisseur entrant spécifie.
  • Définissez un TTL court pendant l’itération (par exemple 60 à 300 secondes), puis augmentez-le une fois stable.
  • Si votre fournisseur supporte les domaines personnalisés (Mailhook le fait), suivez leurs étapes d’intégration de domaine personnalisé et exigences de validation.

Parce que les valeurs MX sont spécifiques au fournisseur, ne les devinez pas. Pour le contrat actuel et les instructions de Mailhook, commencez avec llms.txt.

Vérifier la propagation et le routage

Les changements DNS peuvent paraître “sauvegardés” mais ne pas être actifs partout. Vérifiez externellement :

# Remplacez par votre sous-domaine
DIG_DOMAIN="qa-mail.exemple.com"

dig MX "$DIG_DOMAIN" +short

Si vous ne voyez pas d’enregistrements MX, ou s’ils ne correspondent pas aux valeurs attendues de votre fournisseur, la livraison échouera.

Souvenez-vous aussi d’un détail subtil mais important pour le débogage : le routage SMTP est basé sur le destinataire d’enveloppe (l’adresse utilisée pendant la livraison SMTP), qui peut différer de l’en-tête To: montré dans le corps de l’email. Si vous voulez le modèle conceptuel, la plongée profonde de routage de Mailhook est ici : Domaines et Emails : Comment le Routage Fonctionne dans les Boîtes API.

Étape 3 : Choisir un schéma d’adressage qui évolue en CI

Une fois que le domaine route correctement, vos tests ont besoin d’un moyen de générer beaucoup d’adresses uniques sans chevauchement accidentel.

Voici les options communes de mappage de destinataire, et comment elles se comportent sous le parallélisme :

Stratégie de mappage Exemple de destinataire Bon pour Piège commun
Partie locale encodée [email protected] CI parallèle élevée, corrélation facile Attention aux règles de normalisation et limites de longueur
Table d’alias [email protected] Lisible humainement, fixtures stables Nécessite de gérer l’état des alias
Catch-all avec tags [email protected] Expérimentation rapide Facile de créer des collisions si vous n’isolez pas par exécution

Pour les flux de test, le motif “partie locale encodée” tend à être le plus robuste parce qu’il rend l’unicité explicite.

Une convention pratique :

  • Générez un run_id (ou attempt_id) par tentative de test.
  • Utilisez-le dans la partie locale du destinataire.
  • Stockez-le avec vos artefacts de test pour que les échecs soient déboguables.

Important : ne supposez pas que chaque système préserve la casse, les points, ou la sémantique d’adressage plus de manière cohérente entre fournisseurs. Si vous acceptez des adresses email saisies par l’utilisateur dans votre app, gardez votre politique produit séparée de ce que votre harnais de test utilise. Pour une plongée profonde sur les cas limites, voir Adresses Email dans l’Automatisation : Validation et Cas Limites.

Étape 4 : Consommer l’email entrant de manière déterministe (webhook d’abord, polling en fallback)

La plupart des tests email instables échouent pour une de ces deux raisons :

  1. Ils regardent au mauvais endroit (boîte partagée, mauvaise exécution).
  2. Ils attendent incorrectement (sleeps fixes au lieu d’attentes pilotées par événement).

Un motif fiable est :

  • Créer une boîte par exécution ou par tentative.
  • Préférer un signal webhook pour l’arrivée.
  • Garder le polling comme fallback (pour les environnements CI où les webhooks entrants sont difficiles).

Mailhook supporte à la fois les notifications webhook en temps réel et une API de polling, et livre les emails comme JSON structuré, ce qui est beaucoup plus sûr que scraper du HTML.

Flux minimal “boîte par tentative” (pseudocode agnostique du fournisseur)

attempt_id = new_uuid()

inbox = create_inbox({
  domain: "qa-mail.exemple.com",
  metadata: { attempt_id }
})

# Utilisez inbox.email quand votre app demande une adresse
submit_signup_form(email=inbox.email)

# Attente déterministe (webhook d'abord, polling en fallback)
msg = wait_for_message({
  inbox_id: inbox.inbox_id,
  match: { purpose: "signup_verification" },
  timeout_seconds: 60
})

artifact = extract_verification_artifact(msg)  # OTP ou URL
complete_verification(artifact)

Deux détails d’implémentation qui comptent dans les vrais systèmes :

  • Idempotence : les reprises arrivent. Votre logique “attendre” et “consommer” devrait tolérer les livraisons dupliquées.
  • Correspondance étroite : correspondre sur des signaux stables que vous contrôlez (un en-tête de corrélation, un token d’exécution dans le corps), pas sur un layout HTML fragile.

Si vous voulez une recette de fiabilité complète spécifiquement pour les inscriptions, voir Générer Email Temporaire pour Tests d’Inscription Sans Instabilités.

La sécurité webhook fait partie de la fiabilité des tests

Si votre fournisseur signe les payloads webhook (Mailhook supporte les payloads signés), vérifiez la signature et rejetez les requêtes invalides. Cela évite que des événements “email arrivé” usurpés contaminent votre pipeline de test.

Traitez cela comme toute autre ingestion d’événement :

  • Vérifiez la signature.
  • Appliquez la tolérance de timestamp pour réduire le risque de replay.
  • Rendez les gestionnaires idempotents.

Étape 5 : Rendre cela sûr pour que les agents LLM gèrent l’email

L’email est une entrée non fiable, et l’outillage d’agent amplifie le risque parce qu’un LLM peut suivre des liens ou exécuter des instructions intégrées dans le contenu. Quand vous connectez une boîte à un agent, concevez une interface contrainte.

Garde-fous recommandés :

  • Fournissez à l’agent une vue minimisée et structurée (sujet, expéditeur, heure de réception, et OTP extrait ou une seule URL de vérification).
  • Autorisez les domaines pour les liens cliquables, et exigez une confirmation explicite avant toute navigation.
  • Évitez de rendre du HTML dans la boucle d’agent. Préférez text/plain ou un pipeline d’extraction assaini.
  • Loggez les identifiants (inbox_id, message_id, attempt_id), pas les corps complets, sauf si vous avez une politique de rétention forte.

Le modèle de Mailhook de recevoir les emails comme JSON convient bien à cela, parce que vous pouvez traiter les messages comme des enregistrements de données et passer seulement ce dont l’agent a besoin.

Étape 6 : Dépanner “email non reçu” avec un domaine personnalisé

Quand une configuration de domaine personnalisé échoue, vous voulez une checklist qui distingue les problèmes DNS des problèmes d’application.

Commencez par ces vérifications à fort signal :

  • Confirmez que les enregistrements MX sont présents et corrects en utilisant dig.
  • Confirmez que vous envoyez au domaine exact que vous avez configuré (les typos et mauvais sous-domaines d’environnement sont communs).
  • Confirmez que le système utilise le bon destinataire au niveau de l’enveloppe SMTP (pas seulement l’en-tête To:).
  • Si vous utilisez des webhooks, confirmez que votre endpoint est accessible depuis l’internet public et que la vérification de signature ne rejette pas d’événements valides.
  • Si vous pollez, confirmez que votre boucle de polling utilise des timeouts explicites et n’ignore pas le message correspondant le plus récent.

Si vous devez déboguer plus profondément, capturez l’ensemble complet d’identifiants stables de la sortie JSON de votre fournisseur et corrélez-les dans vos logs CI (attempt_id, inbox_id, message_id). Cela transforme “ça a planté” en trace actionnable.

Tout assembler avec Mailhook

Mailhook est conçu exactement pour ce style de workflow : créer des boîtes jetables via API, router l’email pour les domaines partagés ou personnalisés, et consommer les messages comme JSON structuré via notifications webhook ou polling.

Pour éviter les exemples obsolètes, utilisez le contrat d’intégration canonique de Mailhook sur llms.txt. Si vous voulez faire fonctionner un domaine personnalisé rapidement puis durcir votre approche, ces deux posts complètent ce guide :

Une fois votre domaine personnalisé en place, le plus gros gain est organisationnel : votre équipe peut traiter l’email comme un flux d’événements testable, pas un canal secondaire instable.

Articles connexes