Mbox es un término genérico para una familia de formatos de archivos relacionados que se utilizan para almacenar colecciones de mensajes de correo electrónico . Se implementó por primera vez en la quinta edición de Unix .
Todos los mensajes de un buzón mbox se concatenan y se almacenan como texto sin formato en un único archivo. Cada mensaje comienza con los cuatro caracteres "From" seguidos de un espacio (la llamada línea "From_") y la dirección de correo electrónico del remitente. La RFC 4155 define que una marca de tiempo UTC sigue a otro carácter de espacio de separación. [1]
Sin embargo, como se indica en la RFC, existe una enorme variación entre los distintos sistemas de almacenamiento. Como ejemplo específico, si se exporta mediante IMAP , el popular servicio Gmail utiliza - como marcador de posición en lugar de la dirección del remitente, lo acompaña con una marca de tiempo que representa la hora en que se configuró la exportación IMAP o la hora de recepción (la que sea más reciente) y no intenta evitar las cadenas "De -" que aparecen en el cuerpo de un correo electrónico.
Un formato similar a mbox es el MH Message Handling System . Otros sistemas, como Microsoft Exchange Server y el servidor IMAP Cyrus , almacenan los buzones de correo en bases de datos centralizadas administradas por el sistema de correo y a las que no pueden acceder directamente los usuarios individuales. El formato de buzón maildir se cita a menudo como una alternativa al formato mbox para los sistemas de almacenamiento de correo electrónico en red.
A diferencia de los protocolos de Internet utilizados para el intercambio de correo electrónico, el formato utilizado para el almacenamiento de correo electrónico nunca se ha definido formalmente a través del mecanismo de estandarización RFC y se ha dejado completamente en manos del desarrollador de un cliente de correo electrónico. Sin embargo, el estándar POSIX definió un marco flexible junto con el programa mailx . En 2005, el tipo de medio application/mbox se estandarizó como RFC 4155, que insinuó que mbox almacena los mensajes del buzón en su formato original de mensaje de Internet (RFC 2822), excepto por el carácter de nueva línea utilizado, el almacenamiento de datos limpios de siete bits y el requisito de que cada mensaje recién agregado finalice con una línea completamente vacía dentro de la base de datos mbox. [1] [2]
El formato mbox utiliza una sola línea en blanco seguida de la cadena 'De' (con un espacio) para delimitar los mensajes; esto puede crear ambigüedades si un mensaje contiene la misma secuencia en el texto del mensaje.
A lo largo de los años, surgieron cuatro variantes populares pero incompatibles: mboxo , mboxrd , mboxcl y mboxcl2 . El esquema de nombres fue desarrollado por Daniel J. Bernstein , Rahul Dhesi y otros en 1996. Cada uno se originó a partir de una versión diferente de Unix . mboxcl y mboxcl2 se originaron a partir del formato de archivo utilizado por las herramientas de correo de Unix System V Release 4. mboxrd fue inventado por Rahul Dhesi et al. como una racionalización de mboxo y posteriormente adoptado por algunas herramientas de correo de Unix, incluida qmail .
Todas estas variantes tienen el problema de que a veces es necesario modificar el contenido del mensaje para eliminar ambigüedades, como se muestra a continuación, de modo que las aplicaciones tienen que saber qué regla de comillas se ha utilizado para realizar la reversión correcta, lo que resultó ser poco práctico. El uso de MIME y la elección de una codificación de transferencia de contenido que comillas las líneas "From_" de una manera compatible con el estándar garantiza que no sea necesario cambiar el contenido del mensaje, sino solo su representación MIME . Por lo tanto, las sumas de comprobación permanecen constantes, una condición previa necesaria para admitir S/MIME y Pretty Good Privacy . Las aplicaciones que crean mensajes nuevos y los almacenan en archivos de base de datos mbox probablemente utilizarán este enfoque para separar el contenido del mensaje del formato de almacenamiento de la base de datos.
mboxo y mboxrd localizan el mensaje buscando líneas De que se encuentren antes de los encabezados del mensaje de correo electrónico. Si From
aparece una cadena " " al principio de una línea en el encabezado o en el cuerpo de un mensaje (una violación estándar de correo para el primero, pero no para el segundo), el mensaje de correo electrónico debe modificarse antes de almacenarse en un archivo de buzón de correo mbox o la línea se tomará como límite del mensaje. Para evitar malinterpretar una From
cadena " " al principio de la línea en el cuerpo del correo electrónico como el comienzo de un nuevo correo electrónico, algunos sistemas "deshacen" [3] el mensaje, generalmente anteponiendo un signo mayor que:
>Desde mi punto de vista...
En el formato mboxo , estas líneas tienen una ambigüedad irreversible. [4]
En el formato mboxo , esto puede provocar la corrupción del mensaje. Si una línea ya está contenida >From
al principio (como en una cita), no se modifica al escribirla. Cuando el software de correo la lee posteriormente, el prefijo >
se elimina por error. El formato mboxrd resuelve este problema convirtiendo From
a >From
y convirtiendo >From
a >>From
, etc. La transformación es entonces siempre reversible. [5]
Ejemplo:
Desde MAILER-DAEMON vie., 8 jul. 2011 12:08:34 Desde: Autor <[email protected]> Para: Destinatario <[email protected]> Asunto: Mensaje de muestra 1 Este es el cuerpo. >De (debe estar con caracteres de escape). Hay 3 líneas. Desde MAILER-DAEMON vie., 8 jul. 2011 12:08:34 Desde: Autor <[email protected]> Para: Destinatario <[email protected]> Asunto: Mensaje de muestra 2 Este es el segundo cuerpo.
Los formatos mboxcl y mboxcl2 utilizan un Content-Length:
encabezado para determinar la longitud de los mensajes y, por lo tanto, la siguiente línea From real . mboxcl todavía cita las líneas From en los propios mensajes como lo hace mboxrd , mientras que mboxcl2 no lo hace.
Algunos clientes de correo electrónico utilizan una modificación del formato mbox para sus carpetas de correo.
Dado que se almacena más de un mensaje en un solo archivo, se necesita algún tipo de bloqueo de archivos para evitar la corrupción que puede resultar de que dos o más procesos modifiquen el buzón de correo simultáneamente. Esto podría suceder si un programa de entrega de correo electrónico de red entrega un mensaje nuevo al mismo tiempo que un lector de correo está eliminando un mensaje existente.
Los distintos formatos de mbox han utilizado varios mecanismos mutuamente incompatibles para permitir el bloqueo de archivos de mensajes, incluidos fcntl()
y lockf()
. Esto no funciona bien con sistemas de archivos montados en red, como el Sistema de archivos de red (NFS) , por lo que tradicionalmente Unix utilizaba archivos de "bloqueo de puntos" adicionales, que se podían crear de forma atómica incluso sobre NFS.
Los archivos mbox también deben bloquearse mientras se están leyendo. De lo contrario, el lector puede ver contenidos de mensajes dañados si otro proceso está modificando el mbox al mismo tiempo, aunque no se produzca ninguna corrupción real en el archivo.
En el desarrollo de código abierto , es común enviar parches en formato diff a una lista de correo para su discusión. El formato diff permite agregar "encabezados" irrelevantes, como datos mbox. [8] [9] Los sistemas de control de versiones como git tienen soporte para generar parches en formato mbox y enviarlos a la lista como correos electrónicos en un hilo. [10] [11]