En un servidor de correo Postfix bajo Linux, una cuenta de correo tiene una estructura de directorios muy concreta, llamada formato maildir. Aquí puedes consultar la especificación de maildir y aquí de los archivos de mensaje.
Vamos a ver cómo es esta estructura:
Contenidos
Estructura de directorios
├── new ├── cur ├── tmp ├── .Drafts ├── .Junk ├── .Sent └── .Trash
- new: en esta carpeta se almacenan los correos recién llegados
- cur: una vez que accedemos al webmail, o consultamos el correo recibido desde un cliente de correo (como Outlook o Thunderbird), los correos se mueven automáticamente a esta carpeta.
- tmp: cuando estamos redactando un nuevo correo, aquí se almacenan temporalmente los adjuntos que incluyamos mientras se están subiendo y luego se borran automáticamente, por lo que debería estar vacía casi siempre.
El resto de carpetas también contienen cada una sus propias carpetas new, cur y tmp, aunque la más usada será siempre la de cur.
- .Drafts/cur: carpeta de borradores
- .Junk/cur: carpeta de spam
- .Sent/cur: aquí se guarda automáticamente el correo enviado
- .Trash/cur: papelera
Estructura de archivos
Cada correo, tanto enviado como recibido, es un archivo de texto plano en formato MIME que contiene las cabeceras, el cuerpo y los adjuntos si los hubiera.
Podemos web su contenido con cualquier editor de texto, aunque para poder acceder a los adjuntos es mejor con un cliente de correo.
En Windows, si queremos que estos archivos se abran directamente con el cliente de correo, podemos ponerle la extensión .eml.
Nomenclatura de archivos
Cada archivo de correo tiene un nombre único con un formato como en este ejemplo:
1610962164.M442757P2717.servername,S=3092,W=3151:2,FSR
- La primera parte en rojo antes del primer punto, es la fecha y hora del mensaje en formato epoch.
- Entre los dos puntos tenemos, en azul, el identificador de entrega, un número que se genera automáticamente y debe ser único para cada mensaje. Puedes ver cómo se calcula en la especificación.
- Tras el segundo punto está, en verde, el nombre de nuestro servidor de correo.
- S= indica el tamaño del mensaje
- W= indica el tamaño RFC822 del mensaje
Estado del correo
Tras los 2 puntos, el 2, es fijo y detrás vienen los flags modificadores del estado del correo:
- :2, : Vacío. El correo está sin leer.
- :2,S (seen): correo leído.
- :2,R (replied): el correo ha sido respondido.
- :2,P (passed): el correo ha sido reenviado.
- :2,F (flagged): el correo ha sido resaltado por el usuario.
- :2,T (trashed): marcado para eliminarse. Se borrará el archivo cuando compactemos la carpeta donde se encuentre.
- :2,D (draft): marcado como borrador.
Así, en el ejemplo, nuestro archivo de correo termina por :2,FSR, lo que significa que ha sido leído, resaltado y respondido.
A tener en cuenta al copiar correos
Recientemente hemos tenido problemas con las copias de seguridad del correo, ya que, a la hora de restaurarlos, no conservaban su estado y aparecían todos como no leídos.
Nos dimos cuenta de que se había modificado el nombre de los correos: se habían cambiado los dos puntos por un guión bajo y al restaurarlo y abrir el webmail, añadía al final 2 puntos y el estado del correo vacío (lo que indica que está sin leer), por ejemplo:
Original
1610962164.M442757P2717.servername,S=3092,W=3151:2,FSR
Copiado
1610962164.M442757P2717.servername,S=3092,W=3151_2,FSR
Restaurado:
1610962164.M442757P2717.servername,S=3092,W=3151_2,FSR:2,
¿Por qué ha sucedido ésto?
Sólo nos ha pasado cuando hemos descargado los archivos de correo a través de FTP desde Windows, porque Windows no admite dos puntos en los nombres del archivo, por lo que, al copiar el archivo desde Linux, se los cambia por un guión bajo.
En algunos casos, teniendo los archivos en una NAS con Linux y accediendo en red desde Windows, los nombres de archivos aparecen mucho peor.
¿Cómo solucionarlo?
Lo mejor es hacer todas las copias desde Linux, o comprimir los archivos a un zip antes de descargar y descomprimirlos en el servidor Linux.
Si el mal ya está hecho, antes de restaurar los archivos en su maildir correspondiente, copiarlos al servidor, navegar a la carpeta donde se encuentren y ejecutar este comando que cambiará en todos los archivos de esa carpeta el guión bajo de sus nombres por 2 puntos:
find -name '*_*' -type f -exec rename 's/_/:/g' {} +
Deja una respuesta