FDM : Récupérer et trier son courrier

Objet : Récupération et tri des mails avec fdm

Niveau requis :

Commentaires : Vous récupérez vos mails sur votre système local et souhaitez les trier dans des boîtes mails différentes.

Débutant, à savoir : Utiliser GNU/Linux en ligne de commande, tout commence là !.

Suivi :

Création par Thuban le 18/12/2012

Testé par <...> le <...>

Commentaires sur le forum : C'est ici1) N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !

Introduction

Bien qu'il existe la possibilité d'utiliser les bulldozer fetchmail et procmail, je vous propose ici une solution plus légère : fdm. À lui tout seul, il peut récupérer vos e-mails, les trier selon le destinataire, l'émetteur, la date, archiver vos mails...

Par la suite, vous serez en mesure de lire vos mails localement, puisqu'ils seront téléchargés dans vos dossiers. Pour cela, on utilise des dossiers appelés Maildir, eux-mêmes composés de sous-dossier cur, new et temp. Pensez donc à créer ces dossiers avant de récupérer vos mails.

L'installation est des plus simple :

apt-get update && apt-get install fdm

Maintenant, on peut le configurer. Pour cela, créez un fichier ~/.fdm.conf (le '~' représentant votre répertoire utilisateur).

Ajout des comptes

On peut désormais préciser dans le fichier de configuration les comptes e-mail. Cela se fait avec la syntaxe suivante :

account "compte1" imap server "imap.serveur.net" port 143
user "utilisateur" pass "******"

Ce qui est précisé entre guillemets ainsi que le numéro du port est à remplacer selon vos besoins. Sachez que “compte1” est le nom donné à ce compte, pour pouvoir se repérer ensuite dans la configuration.
Il est tout à fait possible de définir plusieurs comptes de cette façon. Attention toutefois, pour les comptes imap ssl, remplacez imap par imaps

fdm le facteur du système

Pour recevoir les mails du système, ajoutez ces lignes au fichier de configuration ~/.fdm.conf :

account "stdin" disabled stdin

Puis ceci dans le fichier ~/.forward, avec les “ :

"|/usr/bin/fdm -m -a stdin fetch"

Définir des actions

fdm utilise un système d'“actions” pour traiter vos e-mails. Par exemple, on peut définir une action nommée “inlaposte”, pour déplacer les messages dans le dossier maildir /home/xavier/Maildir/laposte.
Afin de se simplifier la vie, vous pouvez écrire %h à la place de /home/utilisateur, fdm le comprendra.

Voici donc un exemple pour déplacer du courrier dans un dossier précis : action “inlaposte” maildir ”%h/Maildir/laposte“

Récupérer les mails

On va maintenant dire à fdm de placer les courriels destinés à ce compte dans le dossier correspondant. On écrit alors plus bas :

match account "laposte" action "inlaposte"

Gestion des spams

Pour gérer les spams, je vous conseille bogofilter.
Je vous propose le comportement suivant : un mail arrive, bogofilter vérifie s'il s'agit d'un spam, et si oui, il ajoute un en-tête à ce spam. Ensuite, fdm se charge de placer les éventuels spam dans un dossier prévu à cet effet : ~/Maildir/spam

On définit alors les 2 actions suivantes, qui se chargent de filtrer les spams, et de déplacer dans le dossier spam :

action "antispam" rewrite "bogofilter -u -e -p"
action "inspam" maildir "%h/Maildir/spam"

Afin que bogofilter traite les éventuels spams, on va placer 3 autres lignes avant la ligne match account “laposte” action “inlaposte” :

# Tout passe par l'antispam
match all action "antispam" continue
match "^X-Spam-Status: Yes" in headers action "inspam"
match "^X-Bogosity: Yes" in headers action "inspam"

Ces trois lignes font passer tous (all) les mails à l'action antispam, puis continue. Ensuite, on vérifie sir dans les en-têtes des mails (headers) sont présentes les lignes X-Spam-Status: Yes et X-Bogosity: Yes témoignant de la nature spam du mail. Si oui, alors ce mail est passé à l'action “inspam”, et placé dans le dossier des spams.

Listes de diffusion

De la même façon, on peut placer les mails destinés à une liste de diffusion dans un dossier à part. Cela se passe avec des expressions régulières (regexp) qui peuvent être trouvées dans le header ou le corps (body) du message :

match "^(From|Cc|To|List-Id).*@suckless\\.org" in headers action "suckless"

Archivage

fdm peut apparement archiver les mails plus vieux de n jours. Voici ce que l'on ajoute dans le fichier de configuration pour ce faire :

%max_age = 30
action "keep" keep
action "archive" mbox "$h/Maildir/archive/%[maildir]-%yq%Q" compress
account "archive" disabled maildirs {
"%h/Maildir/laposte/"
}
match account "archive" and age > %{max_age} days action "archive"
match account "archive" action "keep"

Récupérer le courrier

Pour récupérer le courrier, lancez la commande fdm fetch. Pour faire vos essai, rajoutez l'option -k afin de laisser les messages sur le serveur.

Si vous souhaitez que fdm récupère vos messages toutes les 5 minutes, tapez crontab -e, puis ajoutez cette ligne :

*/5 * * * * fdm fetch >> $HOME/Maildir/fdm.log

Un exemple?

Cela fait beaucoup d'un coup. Vous trouverez plusieurs exemples dans /usr/share/doc/fdm/examples.