El formato de correo electrónico de Maildir es una forma común de almacenar mensajes de correo electrónico en la que cada mensaje se almacena en un archivo separado con un nombre único, y cada carpeta de correo es un directorio del sistema de archivos. El sistema de archivos local maneja el bloqueo de archivos a medida que se agregan, mueven y eliminan mensajes. Uno de los principales objetivos de diseño de Maildir es eliminar la necesidad de un código de programa para manejar el bloqueo y desbloqueo de archivos . [1]
Especificaciones
Un Maildir directorio (a menudo llamado Maildir
) por lo general tiene tres subdirectorios llamados tmp
, new
y cur
.
El tmp
subdirectorio almacena temporalmente los mensajes de correo electrónico que están en proceso de ser entregados. Este subdirectorio también puede almacenar otros tipos de archivos temporales. El new
subdirectorio almacena los mensajes que se han entregado, pero que ninguna aplicación de correo ha visto aún. El cur
subdirectorio almacena mensajes que ya han sido vistos por aplicaciones de correo. [2]
Maildir ++
Sam Varshavchik, el autor de Courier Mail Server y otro software, escribió una extensión [2] [3] para el formato de Maildir llamada Maildir ++ para admitir subcarpetas y cuotas de correo. Los directorios de Maildir ++ contienen subdirectorios con nombres que comienzan con '.' (punto) que también son carpetas de Maildir ++. Esta extensión no es una violación de la especificación de Maildir, que proporciona explícitamente la posibilidad de agregar más de tmp, new, cur a un maildir.
Operación técnica
El programa que entrega un mensaje de correo electrónico, un agente de entrega de correo , lo escribe en un archivo en el tmp
directorio con un nombre de archivo único. [4] [5] [2] Alrededor de 1995, el algoritmo recomendado por qmail para generar nombres de archivo únicos era concatenar, separados por el carácter de punto , la hora actual de Unix , el identificador de proceso actual (PID) y el nombre de host actual ; compruebe si ese nombre de archivo ya existe (usando stat()
); y, si el nombre del archivo existe, retrase la entrega durante dos segundos y luego vuelva a intentarlo. [1] (Este algoritmo fue criticado en 2006 por Timo Sirainen , el creador de Dovecot . [6] ) En 2000, se recomendó agregar, al PID, el valor de un contador por proceso cuyo valor debería incrementarse después cada entrega; y se abandonó la sugerencia de limitación de velocidad. [4] Para 2003, las recomendaciones se habían modificado para exigir que, en lugar del PID y el contador, la parte central del nombre de archivo se creara "concatenando lo suficiente de las siguientes cadenas para garantizar la unicidad" incluso frente a múltiples entregas al mismo maildir desde uno o más procesos: [7]
- # n , donde n es (en hexadecimal) la salida de la llamada al sistema unix_sequencenumber () del sistema operativo [ cita requerida ] , que devuelve un número que aumenta en 1 cada vez que se llama, comenzando desde 0 después del reinicio.
- X n , donde n es (en hexadecimal) la salida de la llamada al sistema unix_bootnumber () del sistema operativo [ cita requerida ] , que informa el número de veces que se ha arrancado el sistema. Junto con #, esto garantiza la singularidad; desafortunadamente, la mayoría de los sistemas operativos no son compatibles con unix_sequencenumber () y unix_bootnumber.
- R n , donde n es (en hexadecimal) la salida de la llamada al sistema unix_cryptorandomnumber () del sistema operativo [ cita requerida ] , o una fuente equivalente como / dev / urandom. Desafortunadamente, algunos sistemas operativos no incluyen generadores de números aleatorios criptográficos.
- En n , donde n es (en hexadecimal) el número de inodo UNIX de este archivo. Desafortunadamente, los números de inodo no siempre están disponibles a través de NFS.
- V n , donde n es (en hexadecimal) el número de dispositivo UNIX de este archivo. Desafortunadamente, los números de dispositivo no siempre están disponibles a través de NFS. (Los números de dispositivo tampoco son útiles con el sistema de archivos estándar de UNIX: un maildir debe estar dentro de un único dispositivo UNIX para que funcionen link () y rename ().)
- M n , donde n es (en decimal) el contador de microsegundos del mismo gettimeofday () usado para la parte izquierda del nombre único.
- P n , donde n es (en decimal) el ID del proceso.
- Q n , donde n es (en decimal) el número de entregas realizadas por este proceso.
En noviembre de 2018, el autor de qmail Bernstein no había realizado más cambios en estas recomendaciones de generación de nombres de archivo. [8] En los sistemas POSIX modernos, los archivos temporales se pueden crear de forma segura con la mkstemp
función de biblioteca C.
El proceso de entrega almacena el mensaje en maildir creando y escribiendo y luego moviendo este archivo a . La mudanza se puede hacer usando el cambio de nombre , que es atómico en muchos sistemas. [9] Alternativamente, se puede hacer vinculando el archivo a y luego desvinculando el archivo . Cualquier archivo sobrante eventualmente será eliminado. Esta secuencia garantiza que un programa de lectura de maildir no verá un mensaje parcialmente escrito. Puede haber varios programas leyendo un maildir al mismo tiempo. Van desde agentes de usuario de correo (MUA) que acceden al sistema de archivos del servidor directamente, a través del Protocolo de acceso a mensajes de Internet o servidores de Protocolo de oficina postal que actúan en nombre de MUA remotos, hasta utilidades como biff y rsync , que pueden o no conocer. la estructura maildir. Los lectores nunca deben mirar adentro .tmp/uniquefilename
new/uniquefilename
new
tmp
tmp
Cuando un proceso de lectura de maildir consciente (ya sea un servidor POP o IMAP , o un agente de usuario de correo que actúa localmente) encuentra mensajes en el new
directorio al que debe moverlos cur
. Es solo un medio para notificar al usuario "tienes X mensajes nuevos". [10] Este movimiento debe hacerse usando rename()
, ya que la técnica de enlace no atómico y desvinculación puede resultar en mensajes duplicados. En esta etapa, se agrega un sufijo informativo a los nombres de archivo. Consiste en dos puntos (para separar la parte única del nombre del archivo de la información real), un '2', una coma y varios indicadores . El '2' especifica la versión de la información que sigue a la coma. '2' es la única versión actualmente especificada oficialmente, siendo '1' una versión experimental. La especificación define indicadores que muestran si el mensaje ha sido leído, eliminado, etc.: la letra inicial (mayúscula) de Aprobado, Respondido, Visto, En la papelera, Borrador y Marcado. [7] Dovecot usa letras minúsculas para hacer coincidir 26 palabras clave IMAP, [5] que pueden incluir palabras clave estandarizadas, como $ MDNSent , y banderas definidas por el usuario.
Aunque Maildir estaba destinado a permitir el uso sin candados, en la práctica algunos programas que usan Maildirs también usan candados, como Dovecot. [11]
Problemas de compatibilidad del sistema de archivos
El estándar Maildir solo se puede implementar en sistemas que aceptan dos puntos en los nombres de archivo.
Los sistemas que no permiten dos puntos en los nombres de archivo (esto incluye Microsoft Windows y algunas configuraciones de Novell Storage Services ) pueden usar un separador alternativo, como ";" o "-". A menudo es trivial parchear software gratuito y de código abierto para usar un separador diferente. [12]
Dado que actualmente no hay acuerdo sobre el carácter que debería tener este separador alternativo, puede haber dificultades de interoperabilidad entre los diferentes programas de soporte de Maildir en estos sistemas. Sin embargo, no todo el software relacionado con Maildir necesita saber cuál es el carácter separador, porque no todo el software relacionado con Maildir necesita poder leer o modificar las banderas de un mensaje ("leer", "responder a", etc.); el software que simplemente envía mensajes a un Maildir, o archiva mensajes antiguos basados solo en la fecha, debería funcionar sin importar qué separador esté en uso. Si solo el MUA necesita leer o modificar los indicadores de mensaje, y solo se usa uno, entonces se pueden usar separadores alternativos no estándar sin problemas de interoperabilidad.
Software que admite Maildir directamente
Servidores de correo
- Servidor IMAP Dovecot
- Courier Mail Server Servidor SMTP e IMAP, para el que se inventó el formato Maildir ++
- Sendmail El servidor SMTP original
- Servidor SMTP Exim
- Servidor SMTP Postfix
- servidor SMTP qmail , para el que se inventó el formato Maildir
- Servidor SMTP MeTA1
- Servidor SMTP OpenSMTPD
Agentes de entrega
- procmail
- Agente de entrega de Dovecot
- buzón de correo
- getmail , una alternativa de agente de entrega y recuperación de correo compatible con Maildir a Fetchmail
- fdm
- Fuera de líneaIMAP
- mbsync
Lectores de correo
- aerc [13] (cliente de correo electrónico eficiente y extensible)
- Balsa anteriormente el lector de correo oficial de GNOME (antes de Evolution)
- Cone un lector de correo basado en maldiciones
- Evolution , cliente de correo oficial de GNOME
- GNUMail
- Gnus
- KMail , lector de correo KDE
- mailx
- Chucho
- Notmuch [14] (sistema de correo electrónico rápido, de búsqueda global y basado en etiquetas)
- Pino / Alpino
- Mozilla Thunderbird : experimental y "desactivado de forma predeterminada porque todavía hay muchos errores" [15]
notas y referencias
- ↑ a b Bernstein, Daniel J. (1995). "maildir (5)" . Archivado desde el original el 12 de octubre de 1997 . Consultado el 23 de noviembre de 2018 .
- ^ a b c Sam Varshavchik (2009). "maildir" . Consultado el 24 de julio de 2016 .
- ^ Sam Varshavchik (2011). "Maildir ++" . Consultado el 24 de julio de 2016 .
- ^ a b Bernstein., Daniel J. (c. 2000) [Publicado por primera vez en 2000 o antes]. "Utilizando formato maildir" . Archivado desde el original el 2 de septiembre de 2000 . Consultado el 23 de noviembre de 2018 .
- ^ a b Dovecot Wiki: formato maildir
- ^ Sirainen, Timo (5 de diciembre de 2006). "Diferencia para 'MailboxFormat / Maildir ' " . Consultado el 23 de noviembre de 2018 .
Todo este problema es bastante inútil. Solo el primer paso es lo que realmente garantiza que los correos no se sobrescriban, el resto simplemente suena bien. A pesar de que pueden detectar un problema de vez en cuando, no brindan protección garantizada y con la misma facilidad pasarán nombres de archivos duplicados para sobrescribir los correos existentes. El paso 2 no tiene sentido porque hay una condición de carrera entre los pasos 2 y 3. La combinación de PID / host por sí misma ya debería garantizar que nunca encontrará tal archivo. Si lo hace, algo está roto y la verificación stat () no ayudará, ya que otro proceso podría estar haciendo lo mismo al mismo tiempo y usted termina escribiendo en el mismo archivo en tmp /, lo que hace que el correo se corrompa. En el paso 4, el enlace () también fallaría si un archivo idéntico ya estuviera en el maildir, ¿verdad? Equivocado. Es posible que el archivo ya se haya movido al directorio cur /, y dado que puede contener cualquier número de indicadores para entonces, ya no puede verificar con un simple stat () si existe o no. Entonces, realmente, todo lo que es importante para no sobrescribir los correos en su maildir es el paso 1: Siempre cree nombres de archivo que estén garantizados para ser únicos. Olvídese de las esperas de 2 segundos y de las que habla la página de manual de Qmail
- ^ a b Bernstein., Daniel J. (2003) [La primera versión de este documento se publicó por primera vez en 2000 o antes]. "Utilizando formato maildir" . Archivado desde el original el 1 de abril de 2003 . Consultado el 23 de noviembre de 2018 .
- ^ "Instantáneas de Wayback Machine de cr.yp.to/proto/maildir.html" . Archivo de Internet . 2018 . Consultado el 23 de noviembre de 2018 .
- ^ "renombrar" . El grupo abierto . 2013 . Consultado el 23 de julio de 2016 .
Esa especificación requiere que la acción de la función sea atómica.
- ^ Sam Varshavchik (25 de julio de 2016). "Gestión de estructuras maildir" . courier-users (lista de correo) . Consultado el 26 de julio de 2016 .
- ^ Sirainen, Timo (5 de diciembre de 2006). "Diferencia para 'MailboxFormat / Maildir ' " . Consultado el 23 de noviembre de 2018 .
- ^ Soporte de mutt maildir: solución alternativa para sistemas de archivos que no aceptan dos puntos
- ^ "aerc - la mejor página de inicio de cliente de correo electrónico del mundo" . aerc-mail.org .
- ^ "No mucha página de inicio del sistema de correo" . notmuchmail.org . Consultado el 22 de junio de 2019 .
- ^ "Maildir en Thunderbird" . mozilla.org . Consultado el 6 de diciembre de 2020 .
Ver también
- mbox
- Sistema de manejo de mensajes MH
- MIX (correo electrónico)
enlaces externos
- página de manual para maildir
- especificaciones de maildir