Aller au contenu
Réseaux medium

Protocoles email : SMTP, IMAP, POP3

22 min de lecture

Les emails utilisent plusieurs protocoles : SMTP pour l’envoi, IMAP ou POP3 pour la réception. Pour éviter que vos emails arrivent en spam, vous devez configurer SPF, DKIM et DMARC. Ce guide vous explique l’architecture email complète, les ports à utiliser, et comment diagnostiquer les problèmes de délivrabilité courants.

  • SMTP (port 587) = envoi d’emails, IMAP (port 993) = réception synchronisée
  • MX = enregistrement DNS qui indique le serveur mail d’un domaine
  • SPF/DKIM/DMARC = mécanismes anti-spam (vérifiez-les si vos mails arrivent en spam)
  • Port 25 souvent bloqué par les FAI pour éviter le spam
  • dig MX domaine.com +short retourne des serveurs mail
  • dig TXT domaine.com montre un enregistrement SPF (v=spf1…)
  • Je sais que 587 = submission (avec auth), 25 = relay entre serveurs
Fenêtre de terminal
# 1. Trouver le serveur mail d'un domaine
dig MX gmail.com +short
# 2. Vérifier l'enregistrement SPF
dig TXT gmail.com +short | grep spf
# 3. Tester la connexion SMTP (port 587)
openssl s_client -starttls smtp -connect smtp.gmail.com:587
  • Connaissances de base en DNS (enregistrements TXT, MX)
  • Un terminal avec dig ou nslookup
  • Optionnel : telnet ou nc pour tester SMTP

Un email traverse plusieurs composants avant d’arriver à destination. Comprendre cette chaîne est essentiel pour diagnostiquer les problèmes.

Architecture email : du MUA expéditeur au MUA destinataire en passant par les MTA

ComposantNom completRôleExemple
MUAMail User AgentClient email de l’utilisateurThunderbird, Gmail, Outlook
MTAMail Transfer AgentServeur qui transfère les emailsPostfix, Sendmail, Exchange
MDAMail Delivery AgentStocke l’email dans la boîteDovecot, Cyrus
MSAMail Submission AgentReçoit les emails du MUASouvent intégré au MTA
  1. Rédaction

    L’utilisateur écrit son email dans son MUA (Thunderbird, Gmail…).

  2. Soumission (SMTP)

    Le MUA envoie l’email au serveur SMTP de l’expéditeur (port 587).

  3. Routage (SMTP)

    Le MTA de l’expéditeur consulte le DNS (enregistrement MX) pour trouver le serveur de destination.

  4. Transfert (SMTP)

    L’email est transmis au MTA du destinataire (port 25).

  5. Livraison locale

    Le MTA transmet l’email au MDA qui le stocke dans la boîte aux lettres.

  6. Consultation (IMAP/POP3)

    Le destinataire récupère l’email avec son MUA via IMAP ou POP3.

SMTP (Simple Mail Transfer Protocol) est le protocole utilisé pour envoyer des emails. Il fonctionne en mode texte, avec une série de commandes simples.

PortUsageChiffrementAuthentification
25MTA → MTA (relay)STARTTLS optionnelNon requise
587Client → serveur (submission)STARTTLS requisRequise
465Client → serveur (submissions)TLS impliciteRequise

Une session SMTP suit un protocole textuel simple :

Client: EHLO mail.example.com
Serveur: 250-smtp.destinataire.com Hello
250-SIZE 52428800
250 AUTH LOGIN PLAIN
Client: MAIL FROM:<expediteur@example.com>
Serveur: 250 OK
Client: RCPT TO:<destinataire@autre.com>
Serveur: 250 OK
Client: DATA
Serveur: 354 Start mail input
Client: Subject: Test
From: expediteur@example.com
To: destinataire@autre.com
Ceci est le contenu de l'email.
.
Serveur: 250 OK: queued
Client: QUIT
Serveur: 221 Bye

Vérifier que le port répond (bannière uniquement)

Section intitulée « Vérifier que le port répond (bannière uniquement) »
Fenêtre de terminal
nc -zv smtp.example.com 587
# ou
telnet smtp.example.com 587

Réponse attendue : 220 smtp.example.com ESMTP.

Fenêtre de terminal
openssl s_client -starttls smtp -connect smtp.example.com:587

Vous verrez le certificat du serveur et pourrez taper des commandes SMTP après le handshake TLS.

Fenêtre de terminal
openssl s_client -connect smtp.example.com:465

La connexion TLS s’établit immédiatement, sans commande STARTTLS.

Pour récupérer vos emails, deux protocoles existent : IMAP et POP3.

AspectIMAPPOP3
Port standard143 (993 avec TLS)110 (995 avec TLS)
StockageEmails sur le serveurEmails téléchargés localement
Multi-appareils✅ Synchronisé❌ Problématique
Dossiers✅ Gérés sur le serveur❌ Locaux uniquement
Hors lignePartiel (cache)✅ Complet (téléchargé)
Bande passantePlus élevéePlus faible
Fenêtre de terminal
# IMAP avec TLS (port 993)
openssl s_client -connect imap.example.com:993
# POP3 avec TLS (port 995)
openssl s_client -connect pop.example.com:995

Après le handshake TLS, vous pouvez taper des commandes IMAP (A001 LOGIN user pass) ou POP3 (USER xxx).

Note : IMAP4rev2 (RFC 9051) est la version moderne du protocole, mais IMAP4rev1 reste largement déployé.

Niveau 2 : SPF, DKIM, DMARC — la délivrabilité

Section intitulée « Niveau 2 : SPF, DKIM, DMARC — la délivrabilité »

Ces trois mécanismes protègent contre le spam et le phishing en vérifiant l’authenticité des emails.

SPF (RFC 7208) liste les serveurs autorisés à envoyer des emails pour votre domaine. C’est un enregistrement DNS TXT évalué sur l’envelope-from (MAIL FROM / Return-Path), pas sur le header From: visible.

Exemple d’enregistrement SPF :

v=spf1 include:_spf.google.com include:sendgrid.net -all
ÉlémentSignification
v=spf1Version du protocole SPF
include:...Serveurs autorisés (ex: Google, SendGrid)
ip4:203.0.113.5IP spécifique autorisée
-allRejeter (hard fail)
~allMarquer suspect (soft fail) — recommandé au début
?allNeutre (pas de politique)

Vérifier le SPF d’un domaine :

Fenêtre de terminal
dig TXT example.com +short | grep spf

Stratégie de déploiement : commencez par ~all (soft fail) pour monitorer, puis passez à -all une fois la configuration validée.

DKIM (RFC 6376) ajoute une signature cryptographique à chaque email. Le destinataire vérifie cette signature avec une clé publique publiée dans le DNS.

Ce que DKIM signe :

  • Certains headers (From, To, Subject, Date…) après canonisation
  • Le body de l’email (ou un hash partiel)

Fonctionnement :

  1. Le serveur expéditeur signe l’email avec sa clé privée
  2. La signature est ajoutée dans le header DKIM-Signature
  3. Le destinataire récupère la clé publique dans le DNS
  4. Il vérifie que la signature correspond au contenu

Trouver le selector dans un email :

Dans les headers de l’email, cherchez DKIM-Signature :

DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=selector1;

Le champ s= indique le selector (ici selector1).

Vérifier la clé DKIM :

Fenêtre de terminal
# Format : selector._domainkey.domaine
dig TXT selector1._domainkey.example.com +short

Selectors courants : google, default, s1, s2, selector1, k1.

DMARC (RFC 7489) définit la politique à appliquer si SPF ou DKIM échoue. Mais surtout, il introduit le concept d’alignment : le domaine validé par SPF/DKIM doit correspondre au domaine du header From:.

DMARC ne dit pas simplement “SPF ou DKIM doivent passer”. Il exige que le domaine validé soit aligné avec le domaine visible dans le header From:.

Exemple de “SPF pass mais DMARC fail” :

  • Email envoyé par newsletter.example.com (SPF pass)
  • Header From: contact@example.com
  • → SPF valide newsletter.example.com mais le From: est example.com → pas d’alignment → DMARC fail
ParamètreValeurSignification
adkimr (relaxed)Sous-domaine DKIM accepté
adkims (strict)Domaine exact requis
aspfr (relaxed)Sous-domaine SPF accepté
aspfs (strict)Domaine exact requis
v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; pct=100; adkim=r; aspf=r
ÉlémentSignification
v=DMARC1Version
p=nonePas d’action (monitoring)
p=quarantineMettre en spam
p=rejectRejeter l’email
rua=mailto:...Rapports agrégés (quotidiens)
ruf=mailto:...Rapports forensic (par échec)
pct=100Appliquer à 100% des emails

Vérifier le DMARC :

Fenêtre de terminal
dig TXT _dmarc.example.com +short

Avant de diagnostiquer des problèmes de spam, vérifiez ces fondamentaux souvent oubliés :

ÉlémentVérificationCommande
PTR (reverse DNS)L’IP d’envoi a un PTR cohérentdig -x 203.0.113.5 +short
HELO/EHLOLe serveur s’annonce avec un FQDN valideLogs Postfix/Exim
SPFEnregistrement publié et validedig TXT example.com
DKIMClé publiée et signature activedig TXT selector._domainkey.example.com
DMARCPolitique définiedig TXT _dmarc.example.com
Réputation IPIP non blacklistéeMXToolbox, multirbl.valli.org
  1. Vérifier SPF

    Fenêtre de terminal
    dig TXT votredomaine.com +short | grep spf

    Assurez-vous que le serveur d’envoi est listé.

  2. Vérifier DKIM

    Fenêtre de terminal
    dig TXT selector._domainkey.votredomaine.com +short

    Une clé publique doit être retournée.

  3. Vérifier DMARC

    Fenêtre de terminal
    dig TXT _dmarc.votredomaine.com +short

    Une politique doit être définie.

  4. Vérifier la réputation de l’IP

    Utilisez des outils comme MXToolbox ou mail-tester.com pour vérifier si votre IP est blacklistée.

  5. Analyser les headers de l’email

    Dans l’email reçu, examinez le header Authentication-Results :

    Authentication-Results: mx.google.com;
    dkim=pass header.d=example.com header.s=selector1;
    spf=pass (google.com: domain of bounce@example.com designates 203.0.113.5 as permitted sender);
    dmarc=pass (p=QUARANTINE sp=QUARANTINE) header.from=example.com

    Interprétation :

    • dkim=pass : signature DKIM valide
    • spf=pass : IP autorisée par SPF
    • dmarc=pass : alignment OK + politique respectée

    Si vous voyez dmarc=fail avec spf=pass, c’est probablement un problème d’alignment.

CodeSignificationSolution
421Service temporairement indisponibleRéessayer plus tard
450Boîte mail temporairement indisponibleGreylisting, réessayer
550Adresse email n’existe pasVérifier l’adresse
551Utilisateur non localMauvais serveur de destination
552Quota dépasséBoîte pleine
553Syntaxe incorrecteVérifier le format de l’adresse
554Transaction échouéeSouvent lié au spam/blacklist

Les codes DSN étendus (format X.Y.Z) donnent plus de détails :

Code DSNSignificationAction
5.1.1Adresse invalideVérifier l’adresse destinataire
5.2.2Boîte pleineAttendre ou contacter le destinataire
5.7.1Relaying deniedConfigurer l’authentification SMTP
5.7.23SPF failVérifier l’enregistrement SPF
5.7.26DMARC failVérifier alignment et politique
4.7.0Temporairement rejeté (greylisting)Réessayer dans 5-15 min
SymptômeCause probableVérification
Aucune erreur, email disparuFiltré en spam ou quarantaineVérifier les dossiers spam
Bounce “550 User unknown”Adresse invalideConfirmer l’adresse avec le destinataire
Timeout à la connexionPort bloquénc -zv smtp.dest.com 25
”421 Too many connections”Rate limitingEspacer les envois
”550 5.7.1 Relaying denied”Auth manquanteActiver l’authentification SMTP
SPF pass, DMARC failProblème d’alignmentVérifier que le From: correspond au domaine SPF/DKIM

Pour configurer les emails d’un domaine, vous avez besoin de plusieurs enregistrements DNS :

TypeNomExempleRôle
MXexample.com10 mail.example.comServeur de réception
Amail.example.com203.0.113.5IP du serveur mail
TXTexample.comv=spf1 ...Politique SPF
TXTselector._domainkey.example.comv=DKIM1; k=rsa; p=...Clé DKIM
TXT_dmarc.example.comv=DMARC1; p=...Politique DMARC

Vérifier l’enregistrement MX :

Fenêtre de terminal
dig MX example.com +short

Résultat typique :

10 mail.example.com.
20 backup.example.com.

Le nombre (10, 20) est la priorité : le plus bas est essayé en premier.

Scénario 1 : Application → SMTP submission → Gmail/Outlook (spam)

Section intitulée « Scénario 1 : Application → SMTP submission → Gmail/Outlook (spam) »

Symptôme : Vos emails transactionnels arrivent en spam chez les destinataires Gmail/Outlook.

Diagnostic :

Fenêtre de terminal
# 1. Vérifier SPF
dig TXT votredomaine.com +short | grep spf
# 2. Vérifier DKIM (trouvez le selector dans vos emails)
dig TXT selector._domainkey.votredomaine.com +short
# 3. Vérifier DMARC
dig TXT _dmarc.votredomaine.com +short
# 4. Vérifier le PTR de l'IP d'envoi
dig -x VOTRE_IP_SMTP +short

Solutions courantes :

  • Ajouter l’IP/domaine du service d’envoi dans SPF
  • Activer DKIM sur votre provider (SendGrid, SES…)
  • Passer de p=none à p=quarantine une fois configuré

Symptôme : Timeout ou connexion refusée sur le port 25.

Fenêtre de terminal
nc -zv smtp.destinataire.com 25
# Connection timed out ou refused

Cause : La plupart des FAI/cloud providers bloquent le port 25 sortant pour éviter le spam.

Solutions :

  • Utiliser un relais SMTP externe (SendGrid, Mailgun, SES) sur le port 587
  • Demander le déblocage du port 25 à votre provider (justification requise)
  • Utiliser un VPS dédié à l’envoi d’emails

Pour une application qui doit envoyer des emails (alertes, mails transactionnels), vous avez plusieurs options :

Recommandé pour la plupart des cas.

Utilisez un service comme SendGrid, Mailgun, SES :

Fenêtre de terminal
# Variables d'environnement typiques
SMTP_HOST=smtp.sendgrid.net
SMTP_PORT=587
SMTP_USER=apikey
SMTP_PASSWORD=SG.xxxxxxxxxxxxx

Avantages :

  • Délivrabilité optimisée
  • Réputation d’IP gérée
  • Statistiques et tracking
  1. Vérifier les enregistrements email d’un domaine

    Fenêtre de terminal
    dig MX github.com +short
    dig TXT github.com +short | grep spf
    dig TXT _dmarc.github.com +short
  2. Tester la connectivité SMTP

    Fenêtre de terminal
    nc -zv smtp.gmail.com 587

    Attendu : Connection to smtp.gmail.com port 587 [tcp/submission] succeeded!

  3. Analyser un header d’email

    Ouvrez un email reçu, affichez les headers complets et cherchez Authentication-Results pour voir le statut SPF/DKIM/DMARC.

SymptômeCause probableSolution
Emails en spamSPF/DKIM/DMARC manquantsConfigurer les enregistrements DNS
”550 5.7.1 Relaying denied”Authentification manquanteActiver l’auth SMTP
IP blacklistéeSpam envoyé depuis cette IPDemander le delist, utiliser un relais
Timeout port 25Bloqué par le FAIUtiliser port 587 ou un relais
”DKIM signature invalid”Clé mal configuréeVérifier le sélecteur et la clé publique

swaks est l’outil de référence pour tester SMTP en détail :

Fenêtre de terminal
# Test basique avec AUTH
swaks --to dest@example.com --from exp@votredomaine.com \
--server smtp.example.com:587 --tls --auth-user apikey --auth-password "$SMTP_PASSWORD"
# Test STARTTLS explicite
swaks --to dest@example.com --server smtp.example.com:587 --tls

Installation : apt install swaks ou brew install swaks

Sur un serveur Postfix, les logs sont dans /var/log/mail.log :

Fenêtre de terminal
# Suivre les envois en temps réel
tail -f /var/log/mail.log | grep -E "(status=|reject|warning)"
# Chercher un email par queue ID
grep "QUEUE_ID" /var/log/mail.log
  • SMTP (port 587 submission, 465 submissions) sert à envoyer des emails ; le port 25 est réservé au relay MTA↔MTA
  • IMAP (port 993) est préféré à POP3 pour la réception multi-appareils synchronisée
  • SPF déclare les serveurs autorisés (attention : limite de 10 DNS lookups, cassé par le forwarding)
  • DKIM signe cryptographiquement les emails ; le selector permet la rotation de clés
  • DMARC exige l’alignment entre le domaine du From: et celui validé par SPF/DKIM
  • Le PTR (reverse DNS) de l’IP d’envoi est souvent vérifié par les serveurs destinataires
  • Utilisez openssl s_client -starttls smtp pour tester STARTTLS, pas juste nc

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

10 questions
10 min.
80% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre