stringtranslate.com

Dirección de correo

El formato de correo electrónico Maildir es una forma común de almacenar mensajes de correo electrónico en un sistema de archivos , en lugar de en una base de datos. A cada mensaje se le asigna un archivo con un nombre único, y cada carpeta de correo es un directorio del sistema de archivos que contiene estos archivos. Maildir fue diseñado por Daniel J. Bernstein alrededor de 1995, con el objetivo principal de eliminar la necesidad de que el código del programa maneje el bloqueo y desbloqueo de archivos mediante el uso del sistema de archivos local. [1] El diseño de Maildir refleja el hecho de que las únicas operaciones válidas para un mensaje de correo electrónico son su creación, eliminación o cambio de estado de alguna manera.

Estructura interna

Presupuesto

Un directorio Maildir (a menudo llamado Maildir) normalmente tiene tres subdirectorios llamados tmp, new, y cur. [2]

Maildir++

Sam Varshavchik, el autor del Courier Mail Server y otros programas, definió la extensión Maildir++ [3] [4] para el formato Maildir con el fin de admitir subcarpetas y cuotas de correo. Los directorios Maildir++ contienen subdirectorios con nombres que comienzan con un '.' (punto) que también son carpetas Maildir++. La extensión cumple con la especificación original de Maildir, que permite subdirectorios además de tmp , new y cur .

Operación técnica

Un agente de entrega de correo es un programa que entrega un mensaje de correo electrónico en un Maildir. El agente de entrega de correo crea un nuevo archivo con un nombre de archivo único en el tmpdirectorio. [5] [6] [3] En el momento de su invención, garantizar nombres de archivo únicos de manera eficiente era difícil. El algoritmo original de qmail [1] para nombres únicos era:

  1. leer la hora actual de Unix
  2. leer el identificador del proceso actual (PID)
  3. leer el nombre del host actual
  4. concatenar los tres valores anteriores en una cadena separada por el carácter de punto ; este es el nuevo nombre de archivo
  5. Si stat()informa que el nombre del archivo existe, espere dos segundos
  6. Vaya al paso anterior hasta que el nombre del archivo no exista
  7. Crea un archivo con un nombre de archivo único y escribe el contenido del mensaje en el nuevo archivo.

En 2000, el autor de qmail recomendó en una especificación actualizada [5] añadir el valor de un contador por proceso al PID, cuyo valor debería incrementarse después de cada entrega. Se abandonó la recomendación de limitar la velocidad de "esperar dos segundos".

En 2003, las recomendaciones se modificaron aún más para exigir que, en lugar del PID y el contador, se creara la parte central del nombre del archivo "concatenando suficientes de las siguientes cadenas para garantizar la unicidad", incluso ante múltiples entregas simultáneas al mismo maildir desde uno o más procesos: [7]

Este algoritmo de 2003 fue criticado [8] en 2006 por ser innecesariamente complejo por Timo Sirainen , el creador de Dovecot .

A partir de noviembre de 2023, el autor de qmail, Daniel Bernstein , no había realizado más cambios en las recomendaciones de generación de nombres de archivo de 2003. [9] En los sistemas POSIX modernos, los archivos temporales se pueden crear de forma segura con la mkstempfunción de biblioteca C.

El proceso de entrega almacena el mensaje en el maildir creando y escribiendo en , y luego moviendo este archivo a . El movimiento se puede hacer usando , que es atómico en muchos sistemas. [10] Alternativamente, se puede hacer vinculando firmemente el archivo a y luego desvinculando el archivo de . Cualquier archivo restante eventualmente será eliminado. Esta secuencia garantiza que un programa de lectura de maildir no verá un mensaje escrito parcialmente. Puede haber múltiples programas leyendo un maildir al mismo tiempo. Van desde agentes de usuario de correo (MUAs), que acceden directamente al sistema de archivos del servidor, a través de servidores de Protocolo de acceso a mensajes de Internet o Protocolo de oficina postal que actúan en nombre de MUAs remotos, a utilidades como biff y rsync , que pueden o no estar al tanto de la estructura de maildir . Los lectores nunca deben buscar en .tmp/uniquefilenamenew/uniquefilenamerenamenewtmptmp

Cuando un proceso de lectura de maildir consciente (ya sea un servidor POP o IMAP , o un agente de usuario de correo que actúe localmente) encuentra mensajes en el newdirectorio, debe moverlos a cur. Es solo un medio para notificar al usuario "tienes X mensajes nuevos". [11] Este movimiento debe realizarse utilizando el sistema de archivos atómico rename(), ya que la técnica alternativa de vincular y luego desvincular no es atómica y puede dar como resultado 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 de 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 especificada oficialmente actualmente, 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", "Enviado a la papelera", "Borrador" y "Marcado". [7] Las aplicaciones a menudo optan por complementar este conjunto muy limitado de indicadores, por ejemplo, notmuch [12] ofrece sincronización de indicadores además de indicadores arbitrarios definidos por el usuario, [13] mientras que Dovecot usa letras minúsculas para que coincidan con 26 palabras clave IMAP, [6] que pueden incluir palabras clave como $ MDNSent o indicadores definidos por el usuario.

Aunque Maildir fue pensado para permitir su uso sin bloqueos, en la práctica algunos programas que utilizan Maildirs también utilizan bloqueos, como Dovecot. [14]

Problemas de compatibilidad del sistema de archivos

El estándar Maildir sólo se puede implementar en sistemas que aceptan dos puntos en los nombres de archivo. [15]

Los sistemas que no permiten el uso de dos puntos en los nombres de archivo (entre ellos, Microsoft Windows y algunas configuraciones de Novell Storage Services ) pueden utilizar un separador alternativo no estándar, como ";" o "-". A menudo, resulta trivial aplicar parches en software libre y de código abierto para que utilice un separador diferente. [16]

Como actualmente no hay un acuerdo sobre qué carácter debería ser este separador alternativo, pueden surgir dificultades de interoperabilidad entre los distintos programas que admiten 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 los indicadores de un mensaje ("leído", "respondido", etc.); el software que simplemente envía a un Maildir o archiva mensajes antiguos de este basándose únicamente en la fecha, debería funcionar sin importar qué separador se esté utilizando. Si solo el MUA necesita leer o modificar los indicadores de los mensajes, y solo se utiliza un MUA, entonces se pueden utilizar separadores alternativos no estándar sin problemas de interoperabilidad.

Software que soporta Maildir directamente

Servidores de correo

Agentes de entrega

Lectores de correo

Notas y referencias

  1. ^ de Bernstein, Daniel J. (1995). "maildir(5)". Archivado desde el original el 12 de octubre de 1997. Consultado el 23 de noviembre de 2018 .
  2. ^ Blum, Richard (2001). Postfix. Sams Publishing. ISBN 978-0-672-32114-6.
  3. ^ abc Varshavchik, Sam (2009). «maildir(5)». Archivado desde el original el 17 de abril de 2024. Consultado el 9 de agosto de 2024 .
  4. ^ Varshavchik, Sam (2011). «Maildir++». Archivado desde el original el 29 de mayo de 2024. Consultado el 9 de agosto de 2024 .
  5. ^ ab Bernstein., Daniel J. (c. 2000) [Publicado por primera vez en 2000 o antes]. "Uso del formato maildir". Archivado desde el original el 2000-09-02 . Consultado el 23 de noviembre de 2018 .
  6. ^ ab Dovecot Wiki: formato maildir
  7. ^ ab Bernstein., Daniel J. (2003) [La primera versión de este documento se publicó por primera vez en 2000 o antes]. "Uso del formato maildir". Archivado desde el original el 2003-04-01 . Consultado el 2018-11-23 .
  8. ^ Sirainen, Timo . "Maildir Mailbox Format: Mail Delivery'". Archivado desde el original el 2024-06-24 . Consultado el 2024-08-09 . Todos estos problemas son bastante inútiles. Solo el primer paso es lo que realmente garantiza que los correos no se sobrescribirán, el resto simplemente suena bien. Aunque pueden detectar un problema de vez en cuando, no ofrecen protección garantizada y con la misma facilidad pasarán nombres de archivos duplicados y sobrescribirán 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 PID/host por sí sola ya debería garantizar que nunca encuentre dicho archivo. Si es así, algo está roto y la comprobació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/, causando que el correo se corrompa.¶ En el paso 4 el link() fallaría si ya existiera un archivo idéntico en Maildir, ¿cierto? Incorrecto. El archivo puede que ya haya sido movido al directorio cur/, y dado que puede contener cualquier número de indicadores para entonces ya no puede comprobar con un simple stat() si existe o no.¶ Se señaló que el paso 2 era útil si el reloj se hubiera movido hacia atrás. Sin embargo, esto no da ninguna garantía de seguridad real porque ya podría existir un nombre de archivo base idéntico en cur/. Además, si el sistema se acaba de reiniciar, el archivo en tmp/ probablemente podría incluso sobrescribirse de forma segura (asumiendo que no se haya enlazado ya a new/).¶ Entonces, realmente, todo lo que es importante para no sobrescribir correos en su Maildir es el paso 1: Siempre cree nombres de archivo que estén garantizados como únicos. Olvídese de las esperas de 2 segundos y cosas así de las que habla la página del manual de Qmail.
  9. ^ "Capturas de Wayback Machine de cr.yp.to/proto/maildir.html". Archivo de Internet . 2023 . Consultado el 23 de noviembre de 2023 .
  10. ^ "renombrar". The Open Group . 2013 . Consultado el 23 de julio de 2016 . Esa especificación requiere que la acción de la función sea atómica.
  11. ^ Sam Varshavchik (25 de julio de 2016). «Gestión de estructuras de maildir». courier-users (Lista de correo) . Consultado el 26 de julio de 2016 .
  12. ^ "Página de inicio del sistema de correo Notmuch". notmuchmail.org . Consultado el 22 de junio de 2019 .
  13. ^ "Documentación de notmuch 0.38.3". notmuch-config . Consultado el 17 de abril de 2024 .
  14. ^ Sirainen, Timo . «Formato de buzón de Maildir: bloqueo». Archivado desde el original el 24 de junio de 2024. Consultado el 9 de agosto de 2024 .
  15. ^ "mailbox — Manipular buzones de correo en varios formatos". Documentación de Python . Consultado el 19 de junio de 2023 .
  16. ^ Compatibilidad con mutt maildir: solución alternativa para sistemas de archivos que no aceptan dos puntos
  17. ^ "aerc - la mejor página de inicio del cliente de correo electrónico del mundo". aerc-mail.org .
  18. ^ "Página de inicio del sistema de correo Notmuch". notmuchmail.org . Consultado el 22 de junio de 2019 .
  19. ^ "Maildir en Thunderbird". mozilla.org . Consultado el 6 de diciembre de 2020 .

Véase también

Enlaces externos