Aller au contenu
Docs

Dépannage

Pourquoi mes e-mails sont-ils envoyés deux fois ?

Découvrez d’où viennent les e-mails en double et évitez-les avec l’en-tête Idempotency-Key, qui permet de relancer les requêtes API sans risque.

Mis à jour le 1 oct. 2026

Cet article vous aide quand des destinataires reçoivent le même e-mail deux fois ou plus. Emailit envoie chaque requête acceptée une seule fois : les doublons signifient donc presque toujours que la requête est parvenue plusieurs fois à Emailit.

Symptômes

  • Un destinataire signale deux e-mails identiques.
  • Email APIEmails affiche deux e-mails ou plus avec le même destinataire et le même objet, chacun avec son propre ID em_…, créés à quelques secondes ou minutes d’intervalle.
  • Email APILogs affiche plusieurs requêtes POST /v2/emails pour le même message.

Cause

Sources fréquentes de requêtes répétées :

  • Relances après un timeout. Votre client HTTP ou votre file de tâches a expiré et relancé la requête, alors que la première avait déjà été acceptée.
  • Files de tâches « au moins une fois » (at-least-once). Un processus s’est arrêté après l’envoi mais avant de marquer la tâche comme terminée : la tâche a donc été réexécutée.
  • Envois déclenchés par webhook. Votre endpoint envoie un e-mail quand il reçoit un événement. S’il a répondu lentement, Emailit a renvoyé le webhook et votre code a envoyé l’e-mail de nouveau.
  • Deux intégrations. Par exemple, un plugin SMTP WordPress et votre application envoient tous deux la même notification, ou une automatisation et votre code envoient tous deux un e-mail de bienvenue.
  • Doubles soumissions d’un formulaire ou d’un bouton.

Emailit supprime déjà les adresses en double au sein d’une même requête, sans tenir compte de la casse, entre to, cc et bcc. Une même requête n’envoie jamais deux fois à la même personne.

Solution

  1. Trouvez la source. Dans Email APIEmails, filtrez par destinataire et comparez les doublons. Vérifiez la clé API et les horodatages, puis rapprochez-les des requêtes dans Email APILogs. Des requêtes provenant de clés différentes indiquent généralement deux intégrations. Des requêtes provenant de la même clé indiquent des relances.

  2. Ajoutez un en-tête Idempotency-Key. Générez une clé une seule fois par e-mail logique, par exemple à partir de l’ID de votre commande ou de votre événement, et réutilisez-la à chaque relance :

    Terminal
    curl https://api.emailit.com/v2/emails \
      -H "Authorization: Bearer $EMAILIT_API_KEY" \
      -H "Idempotency-Key: order-1042-receipt" \
      -H "Content-Type: application/json" \
      -d '{"from":"Acme <hello@acme.com>","to":"ada@example.com","subject":"Your receipt","html":"<p>Thanks!</p>"}'

    Les clés comptent de 1 à 256 caractères (lettres, chiffres, - et _) et sont propres à votre espace de travail.

  3. Gérez les réponses. Pendant 24 heures, une répétition avec la même clé renvoie la réponse d’origine sans envoyer ni débiter de nouveau. Une répétition qui arrive pendant que la première est encore en cours reçoit 409 Idempotency key in progress : patientez, puis relancez avec la même clé. Les requêtes en échec ne sont pas stockées : vous pouvez donc les relancer avec la même clé.

  4. Dédupliquez dans vos gestionnaires de webhooks. Stockez chaque event_id traité et ignorez les événements déjà traités.

  5. Supprimez la seconde intégration. Assurez-vous qu’un seul système envoie chaque type de message.

Les clés d’idempotence fonctionnent avec Envoyer un e-mail et Transférer un e-mail. SMTP n’a pas d’équivalent : dédupliquez donc dans votre application avant de confier les e-mails au relais. Pour plus de détails, lisez Idempotence.

Le problème persiste ?

Contactez le support ou posez votre question sur Discord en indiquant les ID de deux e-mails en double.

Cette page vous a-t-elle été utile ?

Merci pour votre retour.

Merci, nous lisons chaque message.