Skip to content
Engineering

Comment obtenir une adresse e-mail par programmation (pour les tests)

| | 10 min de lecture
Comment obtenir une adresse e-mail par programmation (pour les tests)
How to Get an Email Address Programmatically (For Testing)

Quand vous dites “obtenir une adresse e-mail par programmation” pour les tests, vous voulez généralement dire quelque chose de plus spécifique que “générer une chaîne aléatoire qui ressemble à un e-mail.” Vous avez besoin d’une adresse qui soit routable, isolée et observable pour que votre exécuteur de tests (ou agent LLM) puisse attendre de manière déterministe le bon message et extraire un artefact de vérification (OTP, lien magique, jeton de réinitialisation) sans instabilité.

L’erreur que font les équipes est de traiter l’e-mail comme une surface d’interface utilisateur (extraire du HTML depuis une boîte partagée) au lieu de le traiter comme un flux d’événements (une boîte de réception temporaire que votre code peut lire).

Ce dont vous avez réellement besoin (pas juste une chaîne e-mail)

Dans l’automatisation de tests, une adresse e-mail n’est utile que si vous avez aussi un moyen fiable de :

  • Délimiter les messages à une seule tentative de test (les exécutions CI parallèles ne peuvent pas entrer en collision).
  • Attendre la livraison sans pauses arbitraires.
  • Récupérer le message dans un format lisible par machine.
  • Dédupliquer les tentatives et duplicatas.
  • Nettoyer la boîte de réception (ou la laisser expirer) pour que les tests futurs ne voient pas l’ancien état.

C’est pourquoi le modèle le plus robuste est E-mail + Identifiant de boîte :

  • email : le destinataire routable que vous transmettez au système testé.
  • inbox_id (ou équivalent) : l’identifiant que votre test utilise pour lire uniquement les messages de cette adresse.

Si vous ne transmettez qu’une chaîne e-mail, vous finirez par “chercher” dans une boîte partagée et affronter des conditions de course.

Diagramme de flux simple montrant : L’exécuteur de tests crée une boîte jetable, utilise l’adresse e-mail générée dans l’app testée, attend la livraison via webhook ou polling, extrait l’OTP ou lien de vérification depuis le JSON structuré, puis supprime ou expire la boîte.

Options pour obtenir une adresse e-mail par programmation (et quand chacune fonctionne)

Il existe plusieurs approches légitimes. La bonne dépend de si vous faites des tests unitaires, du développement local, de la CI, ou des flux de bout en bout pilotés par agent.

Approche Ce qu’elle vous donne Bon pour Mode d’échec courant en CI
Domaines réservés (example.com, .test) Une chaîne sûre qui ne reçoit jamais de courrier Tests unitaires, tests de validation uniquement Pas routable, ne peut pas tester la livraison e-mail
Plus-addressing (ex., user+token@domain) Plusieurs adresses “quasi-uniques” sur une boîte Tests manuels à petite échelle Collisions, bizarreries de filtrage, recherche de boîte partagée
Catch-all sur votre domaine Destinataires illimités sous un domaine Environnements de staging, intégrations contrôlées Toujours une boîte partagée sauf si vous construisez routage + stockage
Capture SMTP locale (style Mailpit/MailHog) Comportement de boîte sur localhost Dev local et aperçus PR Difficile à utiliser en CI distribuée, pas routable sur internet
API de boîte jetable Une vraie adresse plus isolation de boîte, récupération JSON CI, automatisation QA, agents LLM Le choix du fournisseur et la sécurité webhook sont critiques

1) Domaines réservés pour les tests qui ne devraient jamais envoyer d’e-mail

Si votre test ne vérifie que la validation de format (par exemple : “rejeter les @ manquants”), n’envoyez pas de courrier du tout. Utilisez des domaines réservés définis pour la documentation et les tests, comme example.com et example.test.

Une référence canonique est RFC 2606, qui réserve example.com, example.net, et example.org.

C’est l’approche la plus simple pour “obtenir une adresse e-mail”, mais elle ne peut pas tester le workflow e-mail réel.

2) Plus-addressing : rapide, mais pas d’isolation

Beaucoup de fournisseurs supportent le plus-addressing (sous-adressage), vous pouvez donc générer :

Avantages :

  • Facile à implémenter.
  • Fonctionne souvent avec les boîtes existantes.

Inconvénients :

  • Vous avez toujours une seule boîte, ce qui signifie état partagé.
  • Certains systèmes normalisent ou suppriment la partie plus.
  • Votre harnais de test dégénère généralement en “chercher dans la boîte une ligne de sujet,” ce qui est fragile.

Si vous exécutez des tests en parallèle, le plus-addressing tend à devenir une source de non-déterminisme.

3) Domaines catch-all : puissants, mais vous construisez de l’infrastructure

Un domaine catch-all (ou sous-domaine catch-all comme test-mail.votreetreprise.com) peut router [email protected] quelque part que vous contrôlez.

Cela peut être une bonne stratégie quand vous avez besoin de :

  • Mise en liste blanche avec les vendeurs
  • Contrôle de la délivrabilité
  • Un domaine stable pour les environnements long terme

Mais un domaine catch-all seul n’est pas une solution de test. Vous avez toujours besoin de :

  • Mappage destinataire-vers-boîte
  • Stockage de messages
  • API de récupération
  • Livraison webhook (optionnelle)
  • Politiques de déduplication et cycle de vie

Si vous voulez ce “contrôle de domaine” plus des boîtes conviviales pour l’automatisation, beaucoup d’équipes finissent par utiliser un fournisseur de boîtes programmables avec support de domaine personnalisé, plutôt que de construire tout le pipeline d’ingestion de courrier.

4) Capture SMTP locale : meilleur pour les boucles de dev local

Les outils de capture SMTP locale sont excellents quand votre app envoie du courrier à localhost et vous voulez l’inspecter pendant le développement. Ils sont moins bons quand :

  • Votre CI s’exécute dans plusieurs conteneurs
  • Votre système testé est distant
  • Vous avez besoin de routage entrant réel et comportement de livraison réaliste

Ils résolvent “voir l’e-mail localement,” pas “coordonner de manière fiable les événements e-mail dans l’automatisation distribuée.”

5) API de boîtes jetables : l’approche la plus directe pour CI et agents

Pour les tests de bout en bout, l’approche la plus propre est :

  • Créer une boîte fraîche via API
  • Utiliser l’adresse e-mail réelle générée dans votre app
  • Attendre l’arrivée d’e-mail de manière déterministe
  • Consommer l’e-mail comme JSON structuré

C’est le pattern pour lequel les produits comme Mailhook sont conçus : créer des boîtes jetables via API, recevoir des e-mails comme JSON, et piloter l’automatisation using webhooks ou polling.

Pour le contrat d’intégration exact et les formes de payload, utilisez la référence canonique : Mailhook llms.txt.

Le workflow déterministe que vous pouvez standardiser à travers les frameworks de test

Peu importe quel exécuteur de test vous utilisez (Playwright, Cypress, pytest, Jest) le workflow fiable est le même :

  1. Provisionner une boîte (une par exécution de test ou une par tentative).
  2. Déclencher l’e-mail (inscription, réinitialisation mot de passe, invitation).
  3. Attendre avec sémantique explicite (webhook d’abord est idéal, polling de secours est pratique).
  4. Parser comme données (champs JSON, text/plain), extraire l’artefact minimal.
  5. Asserter et continuer.

Le choix de conception clé est l’étape 3 : évitez sleep(10) et attendez plutôt une condition concrète.

Une interface “EmailAddressFactory” agnostique au fournisseur

Même si vous utilisez un fournisseur spécifique, cela aide de le cacher derrière une interface pour que vos tests restent portables.

// Interface pseudo-TypeScript
export type EmailWithInbox = {
  email: string;
  inboxId: string;
  expiresAt?: string;
};

export interface EmailAddressFactory {
  createInbox(params?: { webhookUrl?: string }): Promise<EmailWithInbox>;
  waitForMessage(params: {
    inboxId: string;
    timeoutMs: number;
    match?: {
      fromContains?: string;
      subjectContains?: string;
    };
  }): Promise<{ messageId: string; text?: string; html?: string; raw?: string }>;
}

Deux bénéfices immédiats :

  • Votre code de test devient “demander une boîte, attendre un message,” pas “coller ensemble des hacks e-mail.”
  • Vos outils d’agent LLM peuvent être contraints à des primitives sûres (créer, attendre, extraire) plutôt que “lire du HTML de boîte arbitraire.”

Webhook d’abord vs polling : que choisir en 2026

Les deux modèles peuvent être de qualité production si vous les implémentez soigneusement.

Webhook d’abord est meilleur quand :

  • Vous voulez des tests de bout en bout rapides (pas de délai de polling)
  • Vous exécutez déjà un endpoint HTTP en CI
  • Vous pouvez vérifier les signatures et implémenter l’idempotence

Polling est meilleur quand :

  • Vous ne voulez pas exposer un endpoint entrant
  • Vous exécutez localement ou dans des réseaux restreints
  • Vous pouvez tolérer un petit délai et implémenter le backoff

En pratique, la plupart des équipes se contentent d’un hybride :

  • Le webhook livre “message arrivé” rapidement
  • Le polling récupère le message (ou agit comme secours si le webhook est retardé)

Mailhook supporte à la fois les notifications webhook et une API de polling, et peut signer les payloads (utile pour vérifier l’authenticité). Encore une fois, référez-vous aux champs exacts et aux conseils de vérification dans leur llms.txt.

Parsing de messages : traiter l’e-mail comme entrée hostile

Pour les tests, vous n’avez typiquement besoin que d’une chose : un artefact de vérification.

Exemples :

  • Code OTP (6 chiffres)
  • URL de lien magique
  • Lien de réinitialisation mot de passe

Quelques règles fermes qui rendent votre harnais plus sûr et moins instable :

  • Préférez la sortie JSON structurée de votre fournisseur de boîtes.
  • Préférez text/plain au HTML lors de l’extraction.
  • Extrayez le minimum et évitez de “rendre” le contenu e-mail.
  • Si vous extrayez des URLs, validez-les :
    • Liste blanche des noms d’hôte
    • Suivez les redirections soigneusement
    • Évitez d’exécuter des liens arbitraires (risque SSRF en CI)

Si vous intégrez avec des agents LLM, gardez la vue côté agent minimale : ne nourrissez pas de HTML brut et d’en-têtes complètes sauf nécessité.

Scénario d’exemple : tester un e-mail de confirmation de commande

Considérez un test e-commerce où un utilisateur passe une commande et devrait recevoir un e-mail de confirmation avec un numéro de commande et un lien “voir commande”. Cela s’applique que vous testiez votre propre boutique ou un flux partenaire.

Par exemple, si vous testez une intégration similaire à une vitrine haut volume comme acheter du jerky en gros en ligne (confirmations de commande, avis d’expédition, réinitialisations mot de passe), vous voulez que chaque exécution CI ait une boîte fraîche pour que les achats parallèles ne se contaminent pas mutuellement.

Un flux de test robuste ressemble à :

  • Créer une boîte (unique par exécution de test)
  • Utiliser son e-mail au checkout
  • Attendre le message “Confirmation de Commande”
  • Extraire le numéro de commande depuis text (ou champs structurés si votre pipeline les ajoute)
  • Valider que le lien de confirmation pointe vers votre domaine attendu

Comment Mailhook s’adapte (sans changer votre architecture de test)

Si votre objectif principal est : “J’ai besoin d’obtenir une adresse e-mail par programmation puis consommer les e-mails résultants comme données,” Mailhook est conçu autour de ce contrat :

  • Créer des boîtes jetables via API
  • Recevoir des e-mails entrants comme JSON structuré
  • Obtenir des notifications webhook temps réel (avec payloads signés)
  • Poller pour des e-mails quand les webhooks ne sont pas pratiques
  • Utiliser des domaines partagés instantanément, ou apporter un domaine personnalisé quand vous avez besoin de contrôle
  • Traiter les messages par lots quand vous mettez à l’échelle l’ingestion

Pour éviter les décalages entre cet article et l’API actuelle, utilisez la référence d’intégration lisible par machine : Mailhook llms.txt.

Une courte checklist pour choisir votre approche

  • Si vous n’avez pas besoin de recevoir d’e-mail, utilisez des domaines réservés et n’envoyez pas.
  • Si vous avez besoin de recevoir des e-mails en CI avec des exécutions parallèles, préférez les boîtes jetables avec un identifiant de boîte.
  • Si vous avez besoin de mise en liste blanche vendeur ou contrôle de délivrabilité, planifiez pour un domaine personnalisé.
  • Si vous utilisez des webhooks, vérifiez les signatures et concevez les gestionnaires pour être idempotents.

Si vous voulez le workflow “boîte-par-exécution” le plus simple sans construire votre propre pipeline d’ingestion de courrier, commencez avec l’API de boîtes jetables de Mailhook et suivez le contrat dans la référence llms.txt.

email testing test automation ci/cd api testing disposable email

Articles connexes