Accueil / Articles PiApplications. / La plate-forme Java / Applications Java

Archivage des courriels Thunderbird.

Ce qui est écrit ci-dessous est compatible avec la version 52.3.0 de Thunderbird. Pour une version différente, il est probable que nombre d'assertions resteront valables mais elles devront être vérifiées.

Les programmes en source libre ont l'immense avantage (et ce n'est pas le seul) d'être gratuits. La plupart des programmes utilisés par le "grand public" disposent depuis longtemps d'une ou plusieurs version en source libre. Nous allons nous focaliser ici sur le programme "client de messagerie" Thunderbird (équipe Mozilla).

Objectif.

Ce programme n'est sans doute pas le meilleur mais il est pratique et continue à vivre à l'heure où ces lignes sont écrites. Outre la gestion des courriels, il permet la gestion des tâches, de calendriers et disposent d'extensions qui permettent de l'enrichir à la demande. Les versions les plus récentes sont également orientés "partage" et "communication".

On est toutefois surpris de ne pas y trouver une fonction d'archivage. Or les courriels peuvent être des documents à part entière qui nécessitent un archivage sur le moyen ou long terme. Pour cela, on peut faire appel à des programmes externes comme Mailstore ou d'autres. Hélas, la plupart de ces programmes ne sont pas en source libre ou n'existent pas pour des systèmes d'exploitation comme Linux.

Nous avons donc décidé de créer notre propre programme d'archivage au fonctionnement très basique. Ce programme à pour finalité d'extraire les courriels stockés par Thunderbird sur un répertoire en respectant l'arborescence de stockage définie par l'utilisateur. Le programme vérifie la présence de doublons et les ignore.

Le programme est certes basique mais avec un moteur d'indexation et un explorateur, il permet de retrouver rapidement n'importe quel courriel avec ses pièces jointes sans passer par un client de messagerie.

Principes.

Thunderbird est orienté système de fichier. Cela signifie que les courriels sont archivés au sein de fichiers. Pour éclaire notre propos, nous allons prendre le cas d'un compte Linux nommé jm utilisant Thunderbird comme client de messagerie. Lors de son utilisation, Thunderbird crée une racine sous le compte de l'utilisateur : $HOME/.thunderbird/$ID. $ID est un identifiant unique attribué à l'utilisateur (par exemple xigu5tdm.default). Avec notre exemple, la racine de stockage des données de Thunderbird du compte jm sont stockées sous /home/jm/.thunderbird/xigu5tdm.default. Les courriels sont, quant à eux, stockés sur le sous-répertoire Mail. Si l'on parcourt ce répertoire, on observe en premier niveau l'ensemble des boîtes à lettres gérées puis pour chaque boîte aux lettres une arborescence où chaque sous-répertoire reçoit l'extension .sbd. Cette arborescence, si elle existe, est identique à celle créée par l'utilisateur dans sa boîte de réception. Sur ces sous-répertoires, on trouve divers fichiers mais pas de courriels individuels. La raison en est que les courriels sont empilés au format EML dans un même fichier de type MBOX.

Le rôle du programme est de récupérer tous les fichiers MBOX puis d'en extraire un par un chaque courriel afin de les recopier sur une arborescence identique à celle créée par l'utilisateur. Chaque courriel est au format standardisé de transport dit EML (intègre la ou les pièces jointes codées Base 64). Pour chaque courriel extrait le programme calcule son code SHA256 (considéré comme unique) et affecte un entier unique au nom du fichier qui contient le courriel. L'identifiant, son code SHA256 et son répertoire de stockage constitue une entrée d'un fichier "sommaire" qui est ensuite utilisé pour identifier les doublons.

Présentation.

Le programme contient en fait deux fonctions : une pour réaliser l'archivage et une autre pour reconstituer le fichier "sommaire" en cas de corruption ou d'effacement accidentel de ce dernier.

Archivage.

Il faut passer au programme le sous-répertoire du ou des comptes à sauvegarder (paramètre -source). Le programme considère alors que chaque fichier sans extension et non vide sous ce répertoire et un fichier de courriels à exploiter. Pour cela, il ajoute à une arborescence existante dont la racine et transmise (paramètre -target) les nouveaux répertoires trouvés. Il extrait ensuite chaque courriel et vérifie si son code SHA256 n'existe pas déjà dans les fichiers sauvegardés (fichier sommaire créé sur la racine de la cible et nommé .thunderbird.csv). Si le code SHA256 du courriel nouvellement lu existe dans le fichier sommaire, on considère que ce courriel est déjà archivé et il est donc ignoré (unicité du code SHA256). Chaque message est repéré par un entier unique qui sert de nom au fichier EML qui le contient. Chaque entrée du ficher sommaire contient l'identifiant du message, son CRC (code SHA256) et le nom complet du répertoire qui supporte le fichier ou le lien symbolique. Le rôle de ce fichier "sommaire" est de faciliter la fusion des fichiers courriel entre deux archivages. Au lancement le programme vérifie si le fichier sommaire (.thunderbird.csv) existe sur le répertoire pointé par le paramètre -target. S'il n'existe pas, il le créé automatiquement. Il charge ensuite en mémoire le sommaire et détermine le prochain entier d'identification à affecter. Il procède alors au parcours du répertoire Thunderbird est exploite les fichiers MBOX trouvés. Si les paramètres -target et -summary existent, le programme reconstruit le fichier sommaire à partir des fichiers courriels existants sous le répertoire référencé par -target.

Voici un exemple d'affichage console :

+-------------------------------------+
| ARCHIVAGE DES COURRIELS THUNDERBIRD |
+-------------------------------------+
BackThunderbird v1.0.0,  (c) PiApplications 2017.

Archivage des courriels depuis le répertoire Thunderbird /home/jm/.thunderbird/viju5tdm.default/Mail/Local Folders/Archives.sbd...

Analyse du fichier /home/jm/.thunderbird/viju5tdm.default/Mail/Local Folders/Archives.sbd/Assurances.sbd/XYZ...
...
Analyse du fichier /home/jm/.thunderbird/viju5tdm.default/Mail/Local Folders/Archives.sbd/Achats.sbd/Santé.sbd/Hygiène...
Analyse du fichier /home/jm/.thunderbird/viju5tdm.default/Mail/Local Folders/Archives.sbd/Achats.sbd/Magasins.sbd/Bricolage.sbd/Leroy-Merlin...

Nombre de courriels existants ..........: 151
Nombre de courriels archivés ...........: 151

Exécution terminée.

Reconstruction du fichier "sommaire".

Il faut passer au programme le sous-répertoire de dépôt des courriels archivés (paramètre -target). Le programme analyse alors ce répertoire et ses sous-répertoires. Il calcule pour chaque courriel son code SHA256, récupère son identifiant unique (depuis son nom de fichier) et ajoute une entrée au "sommaire". Lorsque tous les courriels ont été balayés le sommaire (fichier .thunderbird.csv) est écrit sur la racine du dépôt des courriels archivés.

Voici un exemple d'affichage console :

+-------------------------------------+
| ARCHIVAGE DES COURRIELS THUNDERBIRD |
+-------------------------------------+
BackThunderbird v1.0.0,  (c) PiApplications 2017.

Reconstruction du sommaire des courriels archivés depuis le répertoire /home/jm/aaa/mailtest...

Nombre de fichiers existants ...........: 151
Nombre de courriels du sommaire ........: 151

Exécution terminée.

Conclusion.

Le programme est lancé depuis la ligne de commande : java -jar BackThunderBird.jar eu.piapplications.backthunderbird.Program -summary | -source={nom du répertoire Thunderbird contenant les fichiers MBOX dont les courriels doivent être extraits} -target={répertoire de dépôt des courriles archivés individuellement}

L'emploi de Java comme plate-forme permet d'utiliser ce programme dans tous les environnements. La tableau qui suit résume les paramètres d ela ligne de commande :

-sourceRépertoire racine des fichiers MBOX Thunderbird à sauvegarder.
-targetRépertoire racine de dépôt des archives de courriels.
-summary 
-targetRépertoire racine de dépôt des archives de courriels.

Téléchargement des librairies Java

(c) PiApplications 2016