toutes les fiches

// comment corriger

En-têtes Date et Message-ID manquants ou incorrects

Chaque email doit porter une Date correcte et un Message-ID unique. Sans eux, les filtres anti-spam ajoutent des points et Gmail peut refuser l'email.

Ce que ça veut dire

Chaque email contient en haut des lignes cachées appelées en-têtes. Deux d'entre elles sont attendues dans chaque message :

  • Date : quand l'email a été écrit, avec le fuseau horaire. Exemple : Date: Tue, 14 Oct 2025 09:30:00 +0200
  • Message-ID : un identifiant unique, comme un numéro de série. Exemple : Message-ID: <7f3a91c2@mail.yourdomain.com>

Les logiciels de messagerie normaux les ajoutent automatiquement. Ils manquent ou sont faux en général quand les emails sont envoyés par un script, une extension de site web, une imprimante ou une vieille application qui construit l'email à la main.

Pourquoi c'est important

  • SpamAssassin ajoute des points pour une date manquante (MISSING_DATE), un Message-ID manquant (MISSING_MID), ou une date loin dans le passé ou le futur (DATE_IN_PAST_..., DATE_IN_FUTURE_...).
  • Gmail peut refuser les emails sans Message-ID valide, et attend des messages qu'ils respectent la norme du format email (RFC 5322).
  • Les logiciels de messagerie utilisent ces en-têtes pour trier les messages et regrouper les conversations.

Comment vérifier

Envoyez un email depuis l'outil ou le script qui pose problème vers votre adresse de test sur la page d'accueil (/). Dans le rapport, la section SpamAssassin liste les règles déclenchées. Vous pouvez aussi ouvrir la source originale de l'email dans n'importe quelle messagerie (« Afficher l'original » dans Gmail) et regarder les premières lignes.

Comment corriger

1. Laissez une bibliothèque d'envoi construire l'email

La meilleure solution est d'arrêter d'écrire les en-têtes à la main. Des bibliothèques comme PHPMailer ou Symfony Mailer (PHP), Nodemailer (Node.js) ou le module email (Python) ajoutent correctement les deux en-têtes. En Python, par exemple :

from email.utils import formatdate, make_msgid
msg["Date"] = formatdate(localtime=True)
msg["Message-ID"] = make_msgid(domain="yourdomain.com")

2. Si vous écrivez les en-têtes vous-même

  • Date doit utiliser exactement le format Day, DD Mon YYYY HH:MM:SS +ZZZZ en anglais, avec le vrai décalage horaire.
  • Message-ID doit être unique pour chaque email, entouré de < et >, et contenir un @ suivi de votre domaine ou du nom de votre serveur. Ne réutilisez jamais le même identifiant.
  • Utilisez une seule Date et un seul Message-ID par email.

3. Réglez l'horloge

Une date fausse vient souvent d'un serveur dont l'horloge est décalée ou réglée sur le mauvais fuseau horaire. Sous Linux, activez la synchronisation de l'heure (par exemple avec timedatectl set-ntp true) et vérifiez le fuseau horaire.

4. Laissez votre serveur mail ajouter ce qui manque

Certains serveurs peuvent ajouter une Date ou un Message-ID manquant aux messages qu'ils envoient. Postfix, par exemple, le fait pour les emails soumis sur le serveur lui-même, mais pas toujours pour les emails qui viennent d'autres machines. C'est un filet de sécurité, pas un remplacement de la correction de l'application.

Vérifiez que c'est corrigé

Envoyez un nouvel email depuis le même outil vers l'adresse de la page d'accueil. La section SpamAssassin ne doit plus lister MISSING_DATE, MISSING_MID ni les règles de date, et la date affichée doit correspondre à l'heure réelle d'envoi.

Vérifiez que c'est corrigé

Une modification DNS peut prendre de quelques minutes à quelques heures. Ensuite, envoyez un nouvel email de test ou scannez à nouveau votre domaine.

Fiches liées