RFC 9051: IMAP4rev2
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 :
- Intègre les extensions essentielles. Des fonctionnalités comme CONDSTORE (stockage conditionnel), NAMESPACE, ESEARCH, LIST-EXTENDED, LITERAL- et MOVE font maintenant partie du protocole de base plutôt que d'être des modules optionnels.
-
Supprime les fonctionnalités obsolètes. L'ancien drapeau
\Recenta disparu. Tout comme les comportements ambigus autour de l'accès simultané aux boîtes aux lettres. - Clarifie la sémantique de synchronisation. Les règles précises pour UIDVALIDITY, MODSEQ et le suivi des modifications rendent possible la construction de clients fiables avec capacité hors ligne.
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
- Utiliser les numéros de séquence pour les références persistantes. Les numéros de séquence changent lorsque les messages sont supprimés. Utilisez toujours les UIDs pour tout ce que vous mettez en cache ou référencez entre les sessions.
- Ignorer les changements UIDVALIDITY. Si UIDVALIDITY change entre les sessions, tous vos UIDs en cache sont invalides. Vous devez rejeter votre cache local et re-synchroniser.
-
Interroger au lieu d'utiliser IDLE. La commande
IDLEpermet au serveur d'envoyer les notifications de nouveaux messages. Interroger tous les 30 secondes gaspille la bande passante et la batterie. Utilisez IDLE pour les mises à jour en temps réel. -
Récupérer BODY[] quand vous avez besoin de BODY.PEEK[].
FETCH BODY[]définit implicitement le drapeau\Seen. UtilisezBODY.PEEK[]pour lire sans marquer comme lu. - Ne pas supporter CONDSTORE. Sans CONDSTORE, chaque reconnexion nécessite une re-synchronisation complète de la boîte aux lettres. Les clients IMAP modernes doivent toujours négocier CONDSTORE.
- Exécuter IMAP sur le port 143 sans TLS. Utilisez le port 993 avec TLS implicite selon RFC 8314.
Impact sur la délivrabilité
- IMAP est un protocole de récupération, pas un protocole d'envoi. Comme POP3, il n'affecte pas directement la délivrabilité sortante. Il détermine comment les destinataires vivent la messagerie que vous envoyez.
- Signaux d'engagement basés sur les drapeaux. Les principaux fournisseurs (Gmail, Outlook) observent les changements de drapeaux IMAP — marquer les messages comme \Seen, les déplacer vers des dossiers, les mettre en étoile — comme des signaux d'engagement. L'engagement positif peut améliorer votre réputation d'expéditeur au fil du temps.
- Interaction avec le dossier spam. Quand un destinataire déplace votre message hors de Junk via IMAP, le fournisseur traite souvent cela comme un signal « pas du spam ». Inversement, les déplacements IMAP vers Junk jouent en votre défaveur.
- Traitement de la boîte aux lettres de rebond. IMAP est meilleur que POP3 pour le traitement des rebonds car vous pouvez SEARCH pour les messages DSN côté serveur, les traiter et les MOVE vers une archive — tout sans télécharger chaque message.