¿Cuánto espacio nos queda en nuestra cuenta IMAP4?

Como es natural, la mayoría de las cuentas IMAP4 tienen un límite de capacidad para evitar abusos. Si estamos usando un webmail como GMail, nos aparecerá el espacio disponible en alguna parte de la interfaz. También existen extensiones para Thunderbird para mostrar esa información.

20190404-imap4_quota.png

¿Cómo podemos acceder a esa información directamente con el protocolo IMAP4?

La clave la tiene el documento IMAP4 QUOTA extension, definido hace más de veinte años, pero aún en vigor.

Algunos conceptos que conviene saber:

  • Se pueden limitar diferentes recursos, según la implementación del servidor. Con Dovecot, por ejemplo, se puede limitar el número de mensajes y el espacio ocupado.
  • Cada carpeta en una cuenta IMAP4 tiene cero o más cuotas "raíz". Las carpetas que comparten cuotas "raíz" comparten los límites definidos por esa cuota "raíz".
  • Los nombres de las cuotas "raíz" son arbitrarios, no tienen nada que ver con los nombres de las carpetas.

Veamos un ejemplo con una cuenta de correo en un servidor Dovecot sin límite de número de mensajes, pero con un tamaño máximo de buzón de 1 Gigabyte:

  • Lo primero será conectar a nuestra cuenta IMAP4. En este ejemplo la conexión va sin cifrar porque conecto desde la propia máquina. Si nuestro servidor requiere conexiones cifradas (debería), puedes usar algún proxy TLS. Tal vez tu servidor IMAP4 requiera mecanismos de autenticación más sofisticados.

    $ telnet 127.0.0.1 143
    Trying 127.0.0.1...
    Connected to 127.0.0.1.
    Escape character is '^]'.
    * OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ STARTTLS AUTH=PLAIN] Dovecot ready.
    a login CUENTA CLAVE
    a OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY LITERAL+ NOTIFY SPECIAL-USE QUOTA] Logged in
    

    Al conectar el servidor nos proporciona sus capacidades no autenticadas. Ojo a la respuesta AUTH=PLAIN, que indica que acepta un simple usuario y contraseña.

    Una vez que nos autenticamos, el servidos nos da la bienvenida con sus capacidades autenticadas. Para este artículo nos interesa la última de la lista: QUOTA.

    Es decir, el servidor soporta cuotas.

  • Las cuotas van asociadas a carpetas, así que técnicamente tendríamos que preguntar la cuota de cada carpeta. Esto tiene su importancia porque IMAP4 permite compartir carpetas y jerarquías enteras entre varias cuentas. Por ejemplo, un usuario podría, en su misma cuenta, tener tanto carpetas privadas como carpetas compartidas con su grupo o departamento. Incluso una jerarquía entera de Newsgroups o feeds RSS. Cada uno de esos elementos podrían tener cuotas diferentes e incluso varias cuotas simultáneas actuando sobre una carpeta.

    Por tanto, hay que preguntar las cuotas que actúan sobre todas y cada una de las carpetas.

    En una implementación típica, un usuario solo tiene una cuota global para todo el contenido de su buzón. Preguntemos, por ejemplo, sobre las cuotas que actúan sobre la carpeta de entrada o inbox:

    a getquotaroot inbox
    * QUOTAROOT inbox "User quota"
    * QUOTA "User quota" (STORAGE 481219 1024000)
    a OK Getquotaroot completed (0.013 + 0.000 + 0.012 secs).
    

    Aquí estamos preguntando sobre las cuotas que actúan sobre la carpeta de entrada. El servidor IMAP4 nos dice que solo hay una cuota "raíz" llamada "User quota". El nombre puede ser arbitrario, pero su semántica aquí parece clara. El servidor también proporciona el estado de la cuota sin tener que pedirlo explícitamente. Aquí me dice que se trata de una cuota que limita el espacio ocupado (no el número de mensajes) que tenemos asignado casi 1 Gigabyte de espacio y que estamos usando 470 Megabytes.

  • Si quisiéramos pedir el estado de la cuota de forma explícita haríamos:

    a getquota "User quota"
    * QUOTA "User quota" (STORAGE 481219 1024000)
    a OK Getquota completed (0.001 + 0.000 secs).
    

    Recuerda que el nombre de la cuota es arbitrario, no tiene ningún significado especial para el protocolo.

Dependiendo del servidor IMAP4 y su configuración, podría ser posible que un usuario pudiese modificar sus cuotas. En mi caso lo tengo desactivado:

a setquota "PRUEBA" (STORAGE 65536)
a NO Quota can be changed only by admin (0.001 + 0.000 secs).

Dovecot permite definir cuotas sofisticadas. Una configuración habitual sería tener una cuota por usuario y una cuota global para el departamento. Los detalles quedan fuera del ámbito de este artículo.