← RFC Reference

RFC 9051: IMAP4rev2

Standards Track Mail Access Protocols Published March 2026
ELI5: Si [POP3](1939) está revisando un apartado postal y llevándose tus cartas a casa, IMAP es como tener un archivador personal en la oficina de correos. Puedes abrir cajones (carpetas), leer cartas sin sacarlas, pegarles etiquetas de colores (marcadores), buscar en todo, y acceder al mismo archivador desde tu teléfono, portátil o tableta — todos viendo el mismo estado. Los mensajes permanecen en el servidor; tus dispositivos solo los ven.

Por Qué Existe

IMAP4rev1 (RFC 3501, publicado en 2003) fue la base del correo multidispositivo durante casi dos décadas. Pero acumuló docenas de RFC de extensiones, casos límite ambiguos y características que cada servidor del mundo real implementó de manera diferente. RFC 9051 — IMAP4rev2 — es una revisión limpia que:

Si estás construyendo un nuevo cliente de correo o integración, apunta a IMAP4rev2. Si el servidor solo admite IMAP4rev1, el conjunto de comandos es casi idéntico — simplemente negocia las extensiones individualmente.

Cómo Funciona

Conexión y Autenticación

IMAP usa el puerto 143 (STARTTLS) o el puerto 993 (TLS implícito, recomendado). Después de conectarse, el cliente se autentica:

-- Conectar al puerto 993 (IMAPS) --
* OK [CAPABILITY IMAP4rev2 AUTH=PLAIN] servidor listo
a1 LOGIN alice@example.com s3cretP@ss
a1 OK [CAPABILITY IMAP4rev2 MOVE CONDSTORE] Sesión iniciada

Cada comando de cliente tiene el prefijo de una etiqueta (como a1). El servidor responde con la misma etiqueta, permitiendo comandos canalizados. Las respuestas sin etiqueta (con prefijo *) llevan datos como conteos de mensajes y listas de capacidades.

Seleccionar un Buzón

a2 SELECT INBOX
* 42 EXISTS                            ← 42 mensajes en INBOX
* OK [UIDVALIDITY 1609459200]         ← época UID; si cambia, resincroniza
* OK [UIDNEXT 1053]                   ← siguiente UID a asignar
* OK [HIGHESTMODSEQ 7834]             ← para sincronización incremental (CONDSTORE)
* FLAGS (\Answered \Flagged \Deleted \Seen \Draft)
a2 OK [READ-WRITE] SELECT completado

Obtener Mensajes

-- Obtener envolvente y banderas para los mensajes 1:5 --
a3 FETCH 1:5 (FLAGS ENVELOPE)
* 1 FETCH (FLAGS (\Seen) ENVELOPE ("Wed, 12 Mar 2025 ..." ...))
* 2 FETCH (FLAGS () ENVELOPE (...))
...
a3 OK FETCH completado

-- Obtener cuerpo completo del mensaje UID 1050 --
a4 UID FETCH 1050 (BODY[])
* 41 FETCH (UID 1050 BODY[] {4523}
(mensaje RFC 5322 completo...)
)
a4 OK UID FETCH completado

Búsqueda del Lado del Servidor

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

Detalles Técnicos Clave

UIDs y Números de Secuencia

Cada mensaje tiene dos identificadores: un número de secuencia (su posición en el buzón, que cambia cuando se eliminan mensajes) y un UID (un número asignado permanentemente que solo aumenta). Los clientes robustos siempre usan UIDs mediante UID FETCH, UID SEARCH, etc. El valor UIDVALIDITY le dice al cliente si sus UIDs en caché siguen siendo válidos; si cambia, el cliente debe resincronizarse desde cero.

Banderas

IMAP4rev2 define estas banderas del sistema:

Bandera Significado
\Seen El mensaje ha sido leído
\Answered Se ha respondido al mensaje
\Flagged Marcado como importante / destacado
\Deleted Marcado para eliminación (removido en EXPUNGE)
\Draft El mensaje es un borrador

La bandera \Recent de IMAP4rev1 se elimina en rev2. Los servidores también pueden admitir palabras clave personalizadas (por ejemplo, $Forwarded, $Junk).

CONDSTORE y QRESYNC

CONDSTORE asigna un valor MODSEQ a cada cambio de bandera. Un cliente que conoce el último MODSEQ que vio puede preguntar: "¿qué cambió desde MODSEQ 7834?" y obtener solo los cambios. QRESYNC (Quick Resynchronization) extiende esto para manejar mensajes expulsados eficientemente. Juntos, hacen que IMAP sea viable en redes móviles donde la resincronización completa es demasiado costosa.

Comando MOVE

En IMAP4rev1, mover un mensaje requería COPY + STORE \Deleted + EXPUNGE — tres comandos con condiciones de carrera. IMAP4rev2 incluye MOVE como una operación atómica nativa:

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

Errores Comunes

Impacto en la Entregabilidad

Related RFCs