Recuperar mensajes borrados Thunderbird

Si estamos utilizando Mozilla Thunderbird como gestor de correo y se han borrado mensajes, ya sea por un descuido propio o bien por un cúmulo de circunstancias, puede que deseamos recuperar estos mensajes.
Si bien existe cierta literatura, no excesiva pero si interesante, planteo un posible procedimiento de recuperación utilizando un mínimo de herramientas.

* Introducción

Desde hace bastantes años he venido utilizando el Mozilla Thunderbird como gestor de correo, con el cual estoy gratamente satisfecho.

De vez en cuando presenta algún desafío en momentos poco propicios, que lo hace más interesante, ya que plantea posibilidades de crecimiento personal al obligar a adquirir nuevos conocimientos o refrescar antiguos y aplicarlos.

La versión de Mozilla Thunderbird que utilizo para ilustrar este procedimiento es la 9.0.1, si bien puede servir para versiones previas y/o posteriores.

* Cuando/Como se eliminan/desaparecen mensajes de forma no deseada

a) Borrado consciente de uno o varios mensajes, sin calcular correctamente las consecuencias.

b) Corrupción de los almacenes de mensajes.

c) Realizar un proceso, valido que conduce a la perdida de mensajes, como por ejemplo:

c.1.- Mover miles de mensajes de la « carpeta A » a la « carpeta B »
c.2.- Sale un mensaje automático indicando que es interesante compactar la « carpeta A » para ahorrar espacio.
c.3.- Ir a la « carpeta B » y ver que realmente no era el destino correcto o deseado y además los mensajes se han mezclado.
c.4.- Ir apurado de tiempo y pensar en « Deshacer el movimiento » -> Ctrl+Z
c.5.- Thunderbird devuelve a la « carpeta A » los mensajes, pero solo los encabezados y elimina de la « carpeta B » los mensajes (cuerpo).

Resultado final, « carpeta A » origen compactada, equivale a la eliminación física de los mensajes y salen los encabezados, pero al clicar encima no muestran nada, obvio al haber sido compactada. En la « carpeta B » destino inicial no salen los encabezados, pero el tamaño total se mantiene lo que indica que posiblemente existan.

d) Otros imprevistos …

* Pensando en posibles soluciones

Para el caso b), se suele recomendar los siguientes pasos:

1.- No compactar
2.- Parar el Thundebird
3.- Ir a la carpeta del sistema donde se almacena los ficheros que contienen los mensajes y borrar el fichero o los ficheros *.msf correspondientes.
4.- Arrancar Thundebird y este regenera los ficheros *.msf que son los que almacenan los encabezados e indexan.

Para el caso a) y c) esto no funciona, ya que en principio no ha habido corrupción del fichero *.msf

Buscando y leyendo (http://blog.coryfoy.com/2007/01/recovering-deleted-emails-from-thunderbird/ , http://www.eyrich-net.org/mozilla/X-Mozilla-Status.html?en y unos cuantos más) parece que hay ciertas soluciones aunque son parciales desde mi punto de vista.

Thunderbird agrega a cada mensaje (email) unas cabeceras/etiquetas, la que nos interesa es X-Mozilla-Status, la cual es de tipo WORD (2 bytes), en concreto interesa el 4 bit de menor peso. Si este bit está a 1 (MSG_FLAG_EXPUNGED) indica que el mensaje será eliminado cuando se compacte la carpeta.

Entonces para recuperar un mensaje habrá que seguir los puntos:

a.- No haber compactado la carpeta que lo almacena (INDISPENSABLE)
b.- Parar el Thunderbird
c.- Hacer un backup del fichero que contiene el mensaje borrado
c1.- Herramientas -> Configuraciones de las cuentas …
c2.- Nos situamos sobre la cuenta opción -> Configuración del servidor y copiamos el valor de « Directorio local »
c3.- Navegamos por nuestro disco duro hasta el « Directorio local » y una vez en este « buceamos » hasta encontrar ficheros que tendrán por nombre el mismo que la carpeta que contiene el mail que hemos borrado.
c4.- Copiamos esos ficheros por ejemplo a otro directorio (backup)

d.- Ahora viene lo interesante, hasta el momento todos los scripts que he visto se basan en substituir 0008 (mensaje no leído) por 0000, pero obviamente esto es una solución parcial ya que puede suceder tener un 0009 (un mensaje leído) u otras muchas variaciones (2^16 a bote de pronto).

Para ello utilizaremos el siguiente script:

sed -r « s/(X-Mozilla-Status:\s\w\w\w)8/\10/g; s/(X-Mozilla-Status:\s\w\w\w)9/\11/g; s/(X-Mozilla-Status:\s\w\w\w)a/\12/g; s/(X-Mozilla-Status:\s\w\w\w)b/\13/g; s/(X-Mozilla-Status:\s\w\w\w)c/\14/g; s/(X-Mozilla-Status:\s\w\w\w)d/\15/g; s/(X-Mozilla-Status:\s\w\w\w)e/\16/g; s/(X-Mozilla-Status:\s\w\w\w)f/\17/g » fichero_backup > fichero_restaurado

(Nota: este script es valido para SED 4.1.2, gnuwin32, ver más adelante la justificación)

Este script contiene transformaciones de 8 a 0, 9 a 1, a a 2, b a 3, … es decir pone el 4 bit de menor peso a 0.

Alguien podría decir, « podrías haber utilizado una operación tipo « and lógica » y simplificas … », pues resulta que con expresiones regulares no se como hacerlo, lo dejo como investigación.

Además me interesaba utilizar una herramienta concreta, que es SED, además utilizo Windows … ejem … por eso aparecen las comillas dobles, el cual os podéis descargar de http://gnuwin32.sourceforge.net/packages/sed.htm

He descubierto que la opción -r de SED, « guión extendido » sirve para que SED entienda los (), los cuales son necesarios para agrupar o referenciar. Para linux bastaría cambiar las comillas dobles (« ) por comillas simples (‘), debería funcionar igual.

En mi caso he procesado un fichero de 1,35 Gigas en un par de minutos y he recuperado del orden de unos 7 mil mensajes. A su estado anterior, es decir, marcados con estrellitas, no leídos, etc …

e.- El fichero_restaurado, lo copiamos en el directorio del Thunderbird del punto c3

f.- Arrancamos el Thunderbird, en el árbol de carpetas debería aparecer una nueva carpeta denominada « fichero_restaurado » que contiene todos los mensajes recuperados. Importante, puede tardar un tiempo ya que el Thunderbird lo primero que va ha hacer es generar un indice es decir un fichero_restaurado.msf

A partir de este momento, ya es cosa de mover, filtrar, borrar, compactar, etc … yo utilizo un addon « Remove Duplicate Messages (Alternate) » versión 0.3.7 para asistirme en limpiezas genereles …

Espero que sea de utilidad.

Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>