Le symptôme

L'application de gestion de flotte taxi envoie un email de confirmation à chaque réservation via Nodemailer et un compte SMTP dédié. En test local, tout fonctionnait parfaitement. En production, les premiers retours utilisateurs sont tombés : « je n'ai reçu aucun email », ou pire, « je l'ai trouvé dans mes spams ».

Éliminer la fausse piste : le code

Premier réflexe, vérifier que Nodemailer envoyait bien sans erreur :

const info = await transporter.sendMail({
    from: '"Taxi Management" <noreply@mondomaine.com>',
    to: booking.customerEmail,
    subject: 'Confirmation de votre réservation',
    html: renderBookingEmail(booking),
});
console.log('Message envoyé :', info.messageId);

Le log confirmait un envoi réussi côté serveur SMTP, avec un messageId valide. Le problème n'était donc pas dans le code d'envoi — il fallait chercher ailleurs, entre le serveur SMTP et la boîte de réception du destinataire.

Le vrai coupable : l'authentification du domaine

Un serveur SMTP peut techniquement envoyer un email « from » n'importe quel domaine — c'est justement ce que les filtres anti-spam vérifient. Sans SPF, DKIM et DMARC correctement configurés sur le domaine expéditeur, les fournisseurs comme Gmail ou Outlook traitent l'email comme potentiellement usurpé.

J'ai vérifié avec dig ce qui était réellement publié sur le domaine :

dig TXT mondomaine.com +short
# rien ! aucun enregistrement SPF n'existait

Le correctif DNS

Trois enregistrements à ajouter chez le registrar du domaine :

; SPF : autorise explicitement le serveur SMTP à envoyer pour ce domaine
mondomaine.com.        TXT   "v=spf1 include:_spf.mon-hebergeur-smtp.com ~all"

; DKIM : signature cryptographique fournie par le service SMTP
selector._domainkey.mondomaine.com.  TXT  "v=DKIM1; k=rsa; p=MIGfMA0GCSq..."

; DMARC : politique de traitement si SPF/DKIM échouent
_dmarc.mondomaine.com. TXT   "v=DMARC1; p=quarantine; rua=mailto:dmarc@mondomaine.com"

Le SPF liste les serveurs autorisés à envoyer au nom du domaine. Le DKIM ajoute une signature vérifiable dans chaque email. Le DMARC indique aux fournisseurs de messagerie quoi faire des emails qui échouent ces vérifications (ici, les mettre en quarantaine plutôt que les rejeter directement, le temps de valider que tout fonctionnait).

Vérifier après coup

Après propagation DNS (24 à 48h), un test avec un outil comme mail-tester.com a confirmé un score correct, et les emails suivants sont arrivés directement en boîte de réception principale, plus en spam.

Ce que je retiens

  • Un envoi Nodemailer « réussi » côté log ne garantit rien sur la délivrabilité réelle : SMTP accepte l'email, mais le fournisseur destinataire décide ensuite où le classer.
  • SPF, DKIM et DMARC ne sont pas optionnels dès qu'on envoie des emails transactionnels depuis un domaine personnalisé — sans eux, on ressemble à un usurpateur aux yeux des filtres anti-spam.
  • dig TXT domaine.com est le premier réflexe pour diagnostiquer un problème de délivrabilité, avant même de toucher au code.
  • Un outil comme mail-tester permet de valider objectivement la configuration au lieu de deviner en observant où atterrissent les emails de test.