Protocolos de correo: IMAP - Nobbot

Protocolos de correo: IMAP

IMAP

Si la semana pasada os hablamos de POP3, era de prever que esta lo hiciéramos de IMAP. Sus siglas vienen de Internet Message Access Protocol, o NAMBLA, y como podemos adivinar es el otro protocolo más popular para obtener nuestros correos. Más moderno, más avanzado, más potente que POP, merece la pena echarle un ojo para entender las diferencias con el mismo.

Para empezar, al igual que con POP, este protocolo está pensado únicamente para leer correos, no para enviarlos. La principal ventaja respecto a este es que también está preparado para gestionarlos: poder organizarlos en carpetas o poder buscar en el servidor son capacidades inherentes al protocolo.

Otro aspecto diferencial es la arquitectura pensada para acceder desde diferentes ordenadores a la vez que mantenemos sincronizadas las copias de nuestros emails. Si en POP decíamos que lo común era borrar los mensajes a medida que los descargamos, en IMAP esos mensajes se mantienen en el servidor hasta que solicitamos su borrado explícitamente.

Esta sincronización distribuida se basa en el UID que explicamos la semana pasada, lo que permite que varios clientes accedan simultáneamente y entiendan qué mensajes están manipulando. Para redondear este soporte distribuido los clientes pueden acceder siguiendo uno de estos tres modos de conexión:

  • Modo offline. Periódicamente se conecta al servidor para descargar mensajes nuevos y sincronizar cualquier cambio que haya podido suceder en las diferentes carpetas. Tenemos la posibilidad de borrar los mensajes a medida que los descargamos, siguiendo un funcionamiento muy parecido a POP3.
  • Modo online. Se accede directamente a la copia de los mensajes del servidor exactamente cuando nos hace falta, sincronizando los cambios prácticamente al vuelo.
  • Modo desconectado. No confundir con el modo offline, en este caso el cliente trabaja con una copia local mientras que no tiene acceso a internet, creando/borrando/leyendo sus emails. La próxima vez que se conecte a Internet estos cambios se sincronizaran con la copia maestra del servidor.

Dado que se parte de un modelo en el que los mensajes se guardan normalmente en el servidor después de ser leídos, IMAP define una manera sencilla de administrarlos: con bandejas de correo, es decir, con carpetas. Estas siguen una jerarquía de tipo árbol, tal y como estamos acostumbrados en los sistemas de ficheros convencionales. Siguiendo el estándar siempre tenemos la bandeja de entrada que será la principal, pero podremos crear otras carpetas con diferentes atributos. Por ejemplo, existen atributos para especificar que una carpeta contiene solo correos (\Noinferiors) o solo carpetas (\Noselect), pero también pueden tener otros atributos que indiquen si existen o no mensajes nuevos desde la última vez que la abrimos (\Marked y \Unmarked).

Podemos habilitarlo en la pestaña de preferencias de Gmail

Una clase parecida de etiquetas pueden tener los correos que recibamos y/o enviamos. Uno de los más usados será el que indica si está leído o no (\Seen), pero también existen otros que indique que el mensaje ha sido contestado (\Answered), que el mensaje ha sido destacado (\Flagged), que es un borrador (\Draft), etc… Toda esta información se guarda directamente en el servidor y no en el cliente como estábamos acostumbrados, lo que permite sincronizar perfectamente estos metadatos entre varios clientes. Además, diferentes servidores o clientes pueden añadir las etiquetas que queramos (no confundir con las etiquetas de Gmail).

Técnicamente, a bajo nivel, IMAP trabaja de manera muy similar a POP3: se abre una conexión al puerto 143 del servidor, y comienza una conversación en ASCII. Siguiendo la costumbre, Gmail utiliza otro puerto, el 993, que es el puerto alternativo de IMAP si queremos que la conexión se cifre bajo SSL. Una vez creada esa conexión, el cliente empieza a enviar comandos y a recibir respuestas.

Al igual que antes, primero debemos autenticarnos siguiendo diferentes comandos para distintos métodos de autenticación más o menos seguros. A continuación tendremos acceso a nuestra cuenta con muchos comandos listos para utilizar, bastantes más que con POP3. Debido a que son una larga lista solo vamos a hablar de los más interesantes.

Ejemplo de cómo se navega entre carpetas en IMAP

Para navegar entre carpetas tenemos LIST para enumerarlas, y SELECT para entrar en una de ellas; por tanto siempre estaremos en el contexto de una carpeta en particular, con lo que las acciones serán diferentes dependiendo de qué carpeta estemos visitando. Luego podremos crear (CREATE), renombrar (RENAME) o borrar (DELETE) esas carpetas, para conseguir la estructura que queramos.

Para obtener los mensajes de una bandeja de correo podemos usar el todopodesoro SEARCH; para obtener el contenido de un mensaje usaremos FETCH; para modificar sus metadatos usaremos STORE y para guardar un mensaje nuevo en el servidor usaremos APPEND. Pero ojo, con APPEND lo guardamos en nuestro servidor, pero no lo podemos enviar a ningún destinatario.

Un inciso antes de seguir: el comando SEARCH puede trabajar sobre multitud de palabras claves (fecha, asunto, contenido, etiquetas, etc). Esto lo hace extremadamente potente y particularmente útil para dispositivos móviles con poca capacidad de procesamiento al acceder a una cuenta con muchos correos, ya que la búsqueda se realiza exclusivamente en el servidor.

Ejemplo de cómo se busca correo, cómo se obtiene y cómo se borra en IMAP

¿Y cómo se borra un mensaje? La idea es que con STORE ponemos la etiqueta \Deleted a los mensajes que queremos borrar, y al acabar podemos ejecutar EXPUNGE para borrar todos esos correos explícitamente. También podemos cerrar esa bandeja de entrada en particular con CLOSE para obtener el mismo resultado, pero además volveremos a la carpeta anterior.

Dejando ya los comandos que probablemente no veremos nunca, hablemos un poco sobre otras ventajas que no hemos mencionado. IMAP entiende nativamente MIME: sin entrar en muchas explicaciones sobre este estándar, esto nos permite bajar solo la parte de un mensaje que nos interesa, por ejemplo el texto sin tener que bajar los adjuntos. Otra ventaja de este estándar es que define cómo añadir extensiones, y algunas son muy populares. El mejor ejemplo es IMAP IDLE, el culpable de que podamos disfrutar de notificaciones PUSH en los más modernos dispositivos.

Como habéis ido viendo a lo largo de la entrada, IMAP es mucho más robusto, más flexible y con más futuro que POP3. Lógicamente, esto provoca que sea más complejo y que genere más carga para el servidor, una de las razones por las que bastantes proveedores ofrecen POP pero no IMAP. Aún así este protocolo no está preparado para cumplir todas las funciones del correo electrónico, falta la más importante: enviarlos. En la próxima entrada de esta serie veremos qué protocolo es el que se usa para ese propósito y en qué consiste.

Más información | Wikipedia

  • Un protocolo mucho menos conocido que POP, así que una vez más se agradece la información tan detallada.

  • C. Roberto

    Hoy en día las cuentas de correo que no soportan IMAP tienen una gran desventaja… sobre todo teniendo en cuenta la gran cantidad de dispositivos distintos desde los cuales accedemos al correo

  • Carlos, hasta hace muy poquito ofrecer acceso vía IMAP era algo “de lujo” y hasta se consideraba una característica de pago. Por suerte para nosotros, ¡ese tiempo pasó!

  • Raquel

    Hola,

    Mirando un poco la transmisión de paquetes desde mi lciente de correo IMAP, veo que la petición es:

    list “” “INBOX”

    La respuesta es: LIST () “/” “INBOX”

    Pero yo tengo en mi cliente de correo varias carpetas IMAP y además varias subcarpetas dentro de INBOX. ¿ Porqué no las lista ?. Qué significa exactamente () “/” “INBOX.”

    Saludos.
    Raquel.