← RFC Reference

RFC 9051: IMAP4rev2

Suivi des normes Protocoles d'accès au courrier Published March 2026
ELI5: Si [POP3](1939) vérifie une boîte postale et ramène vos lettres à la maison, IMAP est comme avoir un classeur personnel au bureau de poste. Vous pouvez ouvrir des tiroirs (dossiers), lire des lettres sans les retirer, coller des onglets colorés dessus (drapeaux), parcourir tout, et accéder au même classeur depuis votre téléphone, votre ordinateur portable ou votre tablette — tous voyant le même état. Les messages restent sur le serveur ; vos appareils les visualisent simplement.

Pourquoi cela existe

IMAP4rev1 (RFC 3501, publié en 2003) a servi de base à la messagerie multi-appareils pendant près de deux décennies. Mais il a accumulé des dizaines de RFC d'extension, des cas limites ambigus et des fonctionnalités que chaque serveur réel implémentait différemment. RFC 9051 — IMAP4rev2 — est une révision complète qui :

Si vous construisez un nouveau client de messagerie ou une intégration, ciblez IMAP4rev2. Si le serveur ne supporte que IMAP4rev1, l'ensemble des commandes est presque identique — il suffit de négocier les extensions individuellement.

Comment cela fonctionne

Connexion et authentification

IMAP utilise le port 143 (STARTTLS) ou le port 993 (TLS implicite, recommandé). Après la connexion, le client s'authentifie :

-- Connexion au port 993 (IMAPS) --
* OK [CAPABILITY IMAP4rev2 AUTH=PLAIN] server ready
a1 LOGIN alice@example.com s3cretP@ss
a1 OK [CAPABILITY IMAP4rev2 MOVE CONDSTORE] Logged in

Chaque commande client est précédée d'une étiquette (comme a1). Le serveur répond avec la même étiquette, permettant les commandes en pipeline. Les réponses sans étiquette (précédées de *) transportent des données comme les comptes de messages et les listes de capacités.

Sélection d'une boîte aux lettres

a2 SELECT INBOX
* 42 EXISTS                            ← 42 messages dans INBOX
* OK [UIDVALIDITY 1609459200]         ← époque UID ; si cela change, re-synchroniser
* OK [UIDNEXT 1053]                   ← prochain UID à attribuer
* OK [HIGHESTMODSEQ 7834]             ← pour la synchronisation incrémentale (CONDSTORE)
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
a2 OK [READ-WRITE] SELECT completed

Récupération de messages

-- Récupérer l'enveloppe et les drapeaux pour les messages 1:5 --
a3 FETCH 1:5 (FLAGS ENVELOPE)
* 1 FETCH (FLAGS (\Seen) ENVELOPE ("Wed, 12 Mar 2025 ..." ...))
* 2 FETCH (FLAGS () ENVELOPE (...))
...
a3 OK FETCH completed

-- Récupérer le corps complet du message UID 1050 --
a4 UID FETCH 1050 (BODY[])
* 41 FETCH (UID 1050 BODY[] {4523}
(full RFC 5322 message...)
)
a4 OK UID FETCH completed

Recherche côté serveur

a5 SEARCH UNSEEN FROM "bob@example.com" SINCE 1-Mar-2025
* SEARCH 38 41 42
a5 OK SEARCH completed

Détails techniques clés

UIDs et numéros de séquence

Chaque message possède deux identifiants : un numéro de séquence (sa position dans la boîte aux lettres, qui change lors de la suppression de messages) et un UID (un numéro attribué de façon permanente qui augmente uniquement). Les clients robustes utilisent toujours les UIDs via UID FETCH, UID SEARCH, etc. La valeur UIDVALIDITY indique au client si ses UIDs en cache sont toujours valides ; si elle change, le client doit re-synchroniser à partir de zéro.

Drapeaux

IMAP4rev2 définit ces drapeaux système :

Drapeau Signification
\Seen Le message a été lu
\Answered Le message a reçu une réponse
\Flagged Marqué comme important / mis en étoile
\Deleted Marqué pour suppression (supprimé lors de EXPUNGE)
\Draft Le message est un brouillon

Le drapeau \Recent d'IMAP4rev1 est supprimé dans rev2. Les serveurs peuvent également supporter des mots-clés personnalisés (par exemple, $Forwarded, $Junk).

CONDSTORE et QRESYNC

CONDSTORE attribue une valeur MODSEQ à chaque changement de drapeau. Un client qui connaît le dernier MODSEQ qu'il a vu peut demander : « qu'est-ce qui a changé depuis MODSEQ 7834 ? » et obtenir uniquement les différences. QRESYNC (Quick Resynchronization) étend ceci pour gérer efficacement les messages supprimés. Ensemble, ils rendent IMAP viable sur les réseaux mobiles où la re-synchronisation complète est trop coûteuse.

Commande MOVE

En IMAP4rev1, déplacer un message nécessitait COPY + STORE \Deleted + EXPUNGE — trois commandes avec des conditions de concurrence. IMAP4rev2 inclut MOVE en tant qu'opération atomique native :

a6 UID MOVE 1050 "Archive"
* OK [COPYUID 1609459200 1050 287]
* 41 EXPUNGE
a6 OK MOVE completed

Erreurs courantes

Impact sur la délivrabilité

Related RFCs