Dirección de correo

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

El formato de correo electrónico Maildir es una forma común de almacenar mensajes de correo electrónico en el 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. Un objetivo importante del diseño de Maildir es eliminar la necesidad de un código de programa para manejar el bloqueo y desbloqueo de archivos.

Estructura interna

Especificaciones

Un directorio Maildir (a menudo llamado Maildir) generalmente tiene tres subdirectorios llamados tmp, new y cur.

El subdirectorio tmp almacena temporalmente mensajes de correo electrónico que están en proceso de entrega. Este subdirectorio también puede almacenar otros tipos de archivos temporales. El subdirectorio new almacena los mensajes que se han entregado, pero que aún no han sido vistos por ninguna aplicación de correo. El subdirectorio cur almacena mensajes que ya han sido vistos por aplicaciones de correo.

Dirección de correo++

Sam Varshavchik, el autor de Courier Mail Server y otro software, escribió una extensión para el formato 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 cumple con la especificación Maildir, que brinda explícitamente la posibilidad de agregar más de tmp, new, cur a un maildir.

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 archivo nuevo con un nombre de archivo único en el directorio tmp. El algoritmo original alrededor de 1995 para generar nombres de archivo únicos, implementado por qmail era:

  1. leer el tiempo actual Unix
  2. leer el identificador de proceso actual (PID)
  3. leer el nombre de host actual
  4. concatenar los tres valores anteriores en una cadena separada por el carácter de período; este es el nuevo nombre de archivo
  5. si stat() informa que el nombre de archivo existe, entonces espere dos segundos
  6. ir al paso anterior hasta que el nombre de archivo no exista
  7. crear un archivo con el nombre de archivo único y escribir el contenido del mensaje al nuevo archivo

Para el año 2000, el autor de qmail recomendó agregar el valor de un contador por proceso al PID, cuyo valor debe incrementarse después de cada entrega, y la sugerencia de limitación de velocidad se eliminó.

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

  • #n, donde n es (en hexadecimal) la salida del sistema operativo unix_sequencenumber() llamada del sistema, que devuelve un número que aumenta en 1 cada vez que se llama, a partir de 0 después del reinicio.
  • Xn, donde n es (en hexadecimal) la salida del sistema operativo unix_bootnumber() llamada del sistema, que reporta el número de veces que el sistema ha sido arrancado. Junto con #, esto garantiza singularidad; por desgracia, la mayoría de los sistemas operativos no soportan unix_sequencenumber() y unix_bootnumber().
  • Rn, donde n es (en hexadecimal) la salida del sistema operativo unix_cryptorandomnumber() llamada del sistema o una fuente equivalente, como /dev/urandom. Lamentablemente, algunos sistemas operativos no incluyen generadores de números aleatorios criptográficos.
  • In, donde n es (en hexadecimal) el número de inodo UNIX de este archivo. Lamentablemente, los números de inode no siempre están disponibles a través de NFS.
  • Vn, 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 dispositivos también no son útiles con el sistema de archivos UNIX estándar: un maildir tiene que estar dentro de un solo dispositivo UNIX para link() y rename() a trabajar.)
  • Mn, donde n es (en decimal) el contador de microsegundo del mismo gettimeofday() utilizado para la parte izquierda del nombre único.
  • Pn, donde n es (en decimal) el ID de proceso.
  • Qn, donde n es (en decimal) el número de entregas hechas por este proceso.

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

Hasta noviembre de 2018, el autor de qmail, Daniel Bernstein, no había realizado más cambios en estas recomendaciones de generación de nombres de archivo. En los sistemas POSIX modernos, los archivos temporales se pueden crear de forma segura con la función de biblioteca C mkstemp.

El proceso de entrega almacena el mensaje en el maildir creando y escribiendo en tmp/uniquefilename, y luego moviendo este archivo a new/uniquefilename . El movimiento se puede hacer usando rename, que es atómico en muchos sistemas. Alternativamente, se puede hacer vinculando el archivo a new y luego desvinculando el archivo de tmp. Cualquier archivo sobrante eventualmente se eliminará. 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 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 MUA remotos, hasta utilidades como biff y rsync, que pueden o puede no ser consciente de la estructura maildir. Los lectores nunca deben buscar en tmp.

Cuando un proceso consciente de lectura de maildir (ya sea un servidor POP o IMAP, o un agente de usuario de correo que actúe localmente) encuentra mensajes en el directorio new, debe mover ellos a cur. Es solo un medio para notificar al usuario "tienes X mensajes nuevos". Este movimiento debe realizarse mediante rename(), ya que la técnica no atómica link-then-unlink puede generar mensajes duplicados. En esta etapa, se agrega un sufijo informativo a los nombres de archivo. Consta de dos puntos (para separar la parte única del nombre de archivo de la información real), un "2", una coma y varias banderas. El "2" especifica la versión de la información que sigue a la coma. "2" es la única versión actualmente especificada oficialmente, "1" siendo 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", "Papelera", "Borrador" y "Marcado". Dovecot usa letras minúsculas para hacer coincidir 26 palabras clave IMAP, que pueden incluir palabras clave estandarizadas, como $MDNSent, y marcas definidas por el usuario.

Aunque Maildir se diseñó para permitir el uso sin bloqueo, en la práctica, algunos programas que usan Maildir también usan bloqueos, como Dovecot.

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 el software gratuito y de código abierto para usar un separador diferente.

Como actualmente no hay acuerdo sobre qué carácter debería tener este separador alternativo, puede haber dificultades de interoperabilidad entre los diferentes programas compatibles con 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", "respondió a" etc.); el software que simplemente entrega 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 banderas de mensajes, y solo se usa un MUA, entonces se pueden usar separadores alternativos no estándar sin problemas de interoperabilidad.

Software que admite Maildir directamente

Servidores de correo

  • Dovecot servidor IMAP
  • Courier Mail Server SMTP y servidor IMAP, para el cual se inventó el formato Maildir++
  • Sendmail El servidor SMTP original
  • Servidor SMTP
  • Postfix SMTP servidor
  • qmail SMTP server, for which the Maildir format was invented
  • MeTA1 SMTP server
  • OpenSMTPD SMTP server

Repartidores

  • procmail
  • Dovecot delivery agent
  • correo
  • getmail, a Maildir-aware mail-retrieval and delivery agent alternative to Fetchmail
  • fdm
  • OfflineIMAP
  • mbsync

Lectores de correo

  • aerc (eficiente y extensible cliente de correo electrónico)
  • Balsa previamente el lector oficial de correo GNOME (prior to Evolution)
  • Cone un lector de correo basado en maldiciones
  • Evolution, cliente oficial de correo GNOME
  • GNUMail
  • Gnus
  • KMail, lector de correo KDE
  • mailx
  • Mutt
  • Notmuch (sistema de búsqueda rápida, global y de correo electrónico basado en etiquetas)
  • Pine/Alpine
  • Mozilla Thunderbird – experimental y “desactivado por defecto porque todavía hay muchos errores”

Notas y referencias

  1. ^ a b Bernstein, Daniel J. (1995). "maildir(5)". Archivado desde el original el 11 de septiembre de 1997 a 12. Retrieved 2018-11-23.
  2. ^ a b c Sam Varshavchik (2009). "maildir". Retrieved 24 de julio 2016.
  3. ^ Sam Varshavchik (2011). "Maildir+". Retrieved 24 de julio 2016.
  4. ^ a b Bernstein., Daniel J. (c. 2000) [Primero publicado 2000 o antes]. "Usando formato maildir". Archivado desde el original el 2000-09-02. Retrieved 2018-11-23.
  5. ^ a b Dovecot Wiki: formato maildir
  6. ^ a b Bernstein, Daniel J. (2003) [La primera versión de este documento fue publicada por primera vez en 2000 o antes]. "Usando formato maildir". Archivado desde el original el 19 de diciembre de 2003-04-01. Retrieved 2018-11-23.
  7. ^ Sirainen, Timo (2006-12-05). "Oficial para 'MailboxFormat/Maildir'". Retrieved 2018-11-23. Todo este problema es bastante inútil. Sólo el primer paso es lo que realmente garantiza que los correos no serán sobrescritos, el resto suena bien. A pesar de que pueden atrapar un problema de vez en cuando, no dan protección garantizada y pasarán fácilmente los nombres de archivo duplicados a través de la sobreescritura de 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í misma ya debe garantizar que nunca encuentra tal archivo. Si lo hace, algo está roto y el cheque stat() no ayudará ya que otro proceso podría estar haciendo lo mismo al mismo tiempo, y termina escribiendo al mismo archivo en tmp/, causando que el correo se corrompa. En el paso 4 el enlace() también fallaría si el archivo idéntico ya estaba en el maildir, ¿verdad? Incorrecto. El archivo puede que ya se haya movido al directorio cur/, y ya que puede contener cualquier número de banderas para entonces no se puede comprobar con un sencillo stat() más si existe o no. Así que realmente, todo lo que es importante en no recibir correos sobrescritos en su maildir es el paso 1: Siempre crear nombres de archivo que están garantizados para ser únicos. Olvídate de las 2 segundas esperas y de tal manera que la página del hombre de Qmail habla sobre
  8. ^ "Wayback Machine snapshots of cr.yp.to/proto/maildir.html". Archivo de Internet. 2018. Retrieved 2018-11-23.
  9. ^ "renombre". El Grupo Abierto. 2013. Retrieved 23 de julio 2016. Esa especificación requiere que la acción de la función sea atómica.
  10. ^ Sam Varshavchik (25 de julio de 2016). "Management of maildir structures". correo-usuarios (Lista principal). Retrieved 26 de julio 2016.
  11. ^ Sirainen, Timo (2006-12-05). "Oficial para 'MailboxFormat/Maildir'". Retrieved 2018-11-23.
  12. ^ mutt maildir soporte: solución para sistemas de archivos que no aceptan colones
  13. ^ "aerc - la mejor página del cliente de correo electrónico del mundo". aerc-mail.org.
  14. ^ "No hay mucha página de inicio del sistema de correo". notmuchmail.org. Retrieved 2019-06-22.
  15. ^ "Maildir en Thunderbird". mozilla.org. Retrieved 2020-12-06.

Contenido relacionado

Game Boy Advance

Directorio Activo

Red inalámbrica

Una red de área local inalámbrica, LAN inalámbrica, WLAN o simplemente red inalámbrica es una red informática inalámbrica que vincula dos o más...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save