BxLUG groupe des utilisateurs de GNU/Linux de Bruxelles

Espace membres

Supprimer les doublons dans votre messagerie

Ce document s'inspire en grande partie d'un article publié en anglais par Mark H. Wilkinson.

Introduction

De nombreuses raisons peuvent conduire à la présence de doublons [1] dans votre messagerie : arrêt inopiné d'une connexion POP3, être en copie d'un message à distination d'une liste, erreurs de manipulation de votre outil de messagerie, … Cette situation, bien que non critique, n'est pas optimale et peut engendrer une série de problèmes annexes comme le manque de place sur un disque ou des recherches ralenties.

Si vous stockez vos mails sous le format maildir et que vous utilisez Courier, cet article vous aidera à faire le ménage de manière automatisée.

Si vous débutez dans la programmation bash, les quelques commandes utilisées ici constituent d'excellents exemples pratiques.

maildir

Dans votre répertoire personnel /home/userid, vous devriez trouver un répertoire Maildir qui contient l'ensemble de vos messages. Chaque message est un fichier individuel sur votre disque et chaque "boîte" est un répertoire.

Pour chaque boîte de votre messagerie, vous devriez retrouver la structure de répertoire suivante :

$ du .ML.bxlug.2004
536K    .ML.bxlug.2004/tmp
4.0K    .ML.bxlug.2004/new
134M    .ML.bxlug.2004/cur
135M    .ML.bxlug.2004

Cet exemple reprend la structure du répertoire /home/gaetan/Maildir/.ML.bxlug.2004 correspondant à la boîte ML->bxlug->2004 de ma messagerie :

ML.bxlug.2004 Evolution

Lorsqu'un MTA délivre un mail dans ce répertoire, il le place dans le répertoire new. Lorsqu'un MUA lit les messages de ce répertoire, il les déplace du répertoire new vers cur.

Avant toute autre opération, veillez donc bien à lire votre messagerie via votre MUA habituel et vous assurer que le répertoire new est bien vide.

Nombre de messages à traiter

Pour avoir une idée du nombre de messages dans le répertoire à traiter, utilisez les commandes suivantes (en adaptant le chemin à votre situation, bien entendu) :

$ cd /home/gaetan/Maildir/.ML.bxlug.2004
$ ls cur/* | wc -l
  16682

Dans la suite de cet article, on suppose que les instructions sont exécutées depuis le répertoire utilisé ci-dessus.

reformat

Pour inspecter et puis trier nos mails, nous allons utiliser l'outil reformat [2] présent dans la suite Courier-MTA.

Plus particulièrement, nous utiliserons les options suivantes :

Identifier un message de manière unique

Pour determiner de manière unique un message, nous allons utiliser l'en-tête Message-ID que chaque message devrait posséder.

$ for i in cur/*; do reformail -x Message-ID: <$i; done | wc -l
  16676

Explications :

Ce nombre doit être égal au nombre obtenu ci-dessus. Si ce n'est pas la cas, consulter la section ci-dessous.

Messages sans Message-ID

Il est possible que certains messages ne contiennent pas l'identifiant unique Message-ID [3]. Pour retrouver les messages qui ne possèdent pas d'en-tête Message-ID, vous pouvez utiliser, par exemple, la commande suivante :

$ for i in cur/*; do if [ `reformail -X Message-ID: <$i | wc -l` -eq 0 ] ; then echo $i ; fi ; done

Ce code effectue les opérations suivantes :

Détection des doublons

L'option -D de reformail effectue les opérations suivantes :

Nous pouvons donc compte les doublons très simplement par la commande suivante :

$ rm -f /tmp/msgids
$ for i in cur/*; do reformail -D 500000 /tmp/msgids <$i && echo $i; fi; done | wc -l
  6501

Explications :

Effacer les doublons

Pour effacer définitivement [5]:

$ rm -f /tmp/msgids
$ for i in cur/*; do reformail -D 500000 /tmp/msgids <$i && rm -f $i; fi; done

Remarques :

Conclusion

Vous avez tous les éléments en main pour contrôler, examiner, trier puis purger les doublons présents dans votre messagerie.

[1] messages en double dans votre messagerie

[2] Pour une description précise de cet outil, vous pouvez toujours consulter http://www.courier-mta.org/?reformail.html

[3] TODO: Pourquoi ?

[4] C'est un abus de langage, il faut lire : le statut de sortie de reformail est placé à 0

[5] Donc de manière irrémédiable, faites attention à ce que vous faites !

[6] Pour donner un ordre de grandeur, dans mon cas, il y a +/- 10000 messages uniques qui ont généré un fichier cache de +/- 400 KB

Bienvenue dans le monde du libre