Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

Gérer son courriel avec des logiciels libres

Ne pas avoir à utiliser un navigateur pour aller sur son webmail est un vrai gain de temps, en particulier si l'on utilise plusieurs adresses mail. D'autant plus qu'il existe de outils permettant de trier automatiquement vos mails selon de nombreux critères. Heureusement, les logiciels libres sont là, et vont nous permettre d'avoir un accès à notre courrier sur mesure.

Voici la présentation de quelques outils que je ne peux que vous conseiller.

Récupération du courrier avec fdm

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 install fdm.

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

Notez qu'il existe des exemples de configuration dans /usr/share/doc/fdm

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 "brucewayne" 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, après tous les autres comptes. (lignes account ....

account "stdin" disabled stdin

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

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

De cette façon, tous les mails qui sont envoyés par le système seront envoyés à fdm par l'entrée standard (stdin), et fdm les enverra sur le compte par défaut.

Plus d'infos à cette page, paragraphe “5.7 stdin and local mail” : http://fdm.sourceforge.net/

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/brucewayne/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”

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 si 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 apparemment archiver les mails plus vieux de n jours. Voici ce que l'on ajoute dans le fichier de configuration pour ce faire :

action "keep" keep
action "archive" mbox "%h/Maildir/archive/%[maildir]-%yq%Q" compress
account "archive" disabled maildirs {
    "%h/Maildir/laposte/"
    # insérer d'autres comptes ici
        }
match account "archive" action "keep"
match account "archive" {
match age invalid or age > 30 days action "archive"
match all action keep
}

Cela suppose qu'il existe un dossier appelé archive. Pour cela, tapez la commande : mkdir -p ~/Maildir/archive/. Les permissions doivent être à 700 : chmod -R 700 ~/Maildir/archive.

Ensuite, vous archivez en lançant la commande suivante : fdm -va archive fetch. Cette commande peut tout à fait avoir sa place dans le crontab :

43 12 * * 1 /usr/bin/fdm -va archive fetch

Récupérer le courrier

Pour récupérer le courrier, lancez la commande fdm fetch. Pour faire vos essais, 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 * * * * /usr/bin/fdm fetch >> $HOME/Maildir/fdm.log

Un exemple?

Cela fait beaucoup d'un coup. Vous trouverez plusieurs exemples dans /usr/share/doc/fdm/examples. Voici mon propre fdm.conf :

# Quelques options :
#set verify-certificates
set unmatched-mail keep
set parallel-accounts 2

# Les courriels plus vieux que %max_age sont archivés
%max_age    = 30

# simple actions
action "drop" drop
action "keep" keep
# actions à réaliser sur les mails
action "inlaposte" maildir "%h/Maildir/laposte"
action "infac" maildir "%h/Maildir/fac"
action "inlavabit" maildir "%h/Maildir/lavabit"
action "intoilelibre" maildir "%h/Maildir/toilelibre"
action "inboiteaspam" maildir "%h/Maildir/bas"

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

# Listes de diffusion
action "suckless" maildir "%h/Maildir/devlists/suckless"
action "gnewsense" maildir "%h/Maildir/devlists/gnewsense"
action "xfce" maildir "%h/Maildir/devlists/xfce"
action "debian" maildir "%h/Maildir/devlists/debian"
action "hurd" maildir "%h/Maildir/devlists/hurd"

### archiving action
action "archive" maildir "%h/Maildir/archive/

###
# Comptes courriel :
account "laposte" imap server "imap.laposte.net"
    user "xavier.cartron" pass "******"
account "fac" imaps server "imaps.etu.univ-nantes.fr" port 993
    user "user2" pass "********"
account "lavabit" imaps server "imap.lavabit.com" port 993
    user "bcnofne" pass "*************"
account "toilelibre" imaps server "imap.singularity.fr" port 993
    user "thuban@singularity.fr" pass "***************"
account "boiteaspam" imap server "imap.laposte.net"
    user "user4" pass "******************"
account "stdin" disabled stdin

###

# Archivage
account "archive" disabled maildirs {
    "%h/Maildir/laposte/"
    "%h/Maildir/lavabit/"
    "%h/Maildir/fac/"
    "%h/Maildir/toilelibre/"
    "%h/Maildir/bas/"
    "%h/Maildir/devlists/"
        }
match account "archive" and age > %{max_age} days action "archive"
match account "archive" action "keep"

# 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"

# Filtres pour les liste de diffusion :
match "^(From|Cc|To|List-Id).*@suckless\\.org" in headers action "suckless"
match "^(From|Cc|To|List-Id).*@gnu\\.org" in headers action "hurd"
match "^(From|Cc|To|List-Id).*@nongnu\\.org" in headers action "gnewsense"
match "^(From|Cc|To|List-Id).*@xfce\\.org" in headers action "xfce"
match "^(From|Cc|To|List-Id).*debian.*@lists\\.debian\\.org" in headers action "debian"

# On envoie les mails dans leurs boîtes
match account "laposte" action "inlaposte"
match account "fac" action "infac"
match account "lavabit" action "inlavabit"
match account "toilelibre" action "intoilelibre"
match account "boiteaspam" action "inboiteaspam"

# On attrape tout ce qui n'a pas été filtré
match all action "inlaposte"

Lire ses mails avec mutt

Il existe de très nombreux tutoriel pour utiliser mutt, je ne reviendrait donc pas dessus au risque de faire ça moins bien. Par exemple, vous pouvez lire :

Fichier ~/.mutt/gpg pour chiffrer les mails

# GnuPG configuration
set pgp_use_gpg_agent=yes
set pgp_decode_command="gpg2 --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
set pgp_verify_command="gpg2 --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f"
set pgp_decrypt_command="gpg2 --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f"
set pgp_sign_command="gpg2 --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f"
set pgp_clearsign_command="gpg2 --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f"
set pgp_encrypt_only_command="/usr/local/bin/pgpewrap gpg2 --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f"
set pgp_encrypt_sign_command="/usr/local/bin/pgpewrap gpg2 %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f"
set pgp_import_command="gpg2 --no-verbose --import %f"
set pgp_export_command="gpg2 --no-verbose --export --armor %r"
set pgp_verify_key_command="gpg2 --verbose --batch --fingerprint --check-sigs %r"
set pgp_list_pubring_command="gpg2 --no-verbose --batch --quiet --with-colons --list-keys %r" 
set pgp_list_secring_command="gpg2 --no-verbose --batch --quiet --with-colons --list-secret-keys %r" 
set pgp_good_sign="^\\[GNUPG:\\] GOODSIG"

set pgp_ignore_subkeys
set pgp_autosign=yes
#set pgp_autoencrypt=no
set pgp_auto_decode=yes
set pgp_replysignencrypted
set pgp_replyencrypt=yes
set pgp_replysign=yes
set pgp_sign_as=0x31E493B37EF9F166

set pgp_timeout=32767

set pgp_verify_sig=yes
set pgp_getkeys_command="gpg2 --recv-keys %r"

#my_hdr X-GPG-Key-FingerPrint: 1180 F11D 11E6 1176 11CC E1B1 

Un .mailcap pour les pièces jointes

Voici un exemple de ~/.mailcap pour ouvrir les pièces jointes. Certains programmes sont en fait des scripts disponibles ici.

le fichier mailcap

Envoyer des mails avec msmtp

Msmtp se configure en éditant le fichier ~/.msmtprc. Sa syntaxe est très simple, puisqu'il suffit de préciser le nom du compte (qui sera utilisé avec mutt par exemple), puis de remplir le serveur, le mot de passe, le port, et éventuellement le nom qui apparaîtra au destinataire. Comme un exemple parle mieux :

account toilelibre
host smtp.singularity.fr
protocol smtp
from thuban@singularity.fr
tls_certcheck off
port 587
auth on
user thuban@singularity.fr
password *********

Vous pouvez éventuellement préciser en début du fichier tls on pour utiliser tls par défaut, et syslog on pour enregistrer les messages d'erreurs de msmtp dans le syslog.

Il est bien sur possible de préciser plusieurs comptes smtp. Pour choisir le compte avec lequel on souhaite envoyer un mail, il faut le préciser avec l'option -a. Par exemple, pour utiliser le compte (account) toilelibre ci-dessus, il faudra utiliser la commande : msmtp -a toilelibre, ce qui donne pour écrire un mail très rapide :

echo "Coucou!" | msmtp -a toilelibre correspondant@mail.zzz