Mutt et ses amis

J'utilisais KMail jusqu'alors pour lire mon courrier, cependant le manque de raccourcis claviers et de souplesse de celui-ci m'ont fait passer à un superbe MUA qu'est Mutt.

mutt.png

Introduction

Tout d'abord il faut oublier ce que vous savez sur les clients mails tout en un. En effet, Mutt part du principe qu'il doit assurer uniquement la fonction minimale d'un client mail, c'est à dire afficher les mails. Il passe par d'autres programmes pour récupérer les mails, les envoyer, les filtrer, les écrire, etc.

Cependant, dans les dernières versions, il est tout de même possible de l'utiliser pour faire ces actions (SMTP POP3 et IMAP), mais nous allons faire avec des outils externes, c'est plus drôle.

Personnellement j'ai choisi les programmes suivants :

  • postfix pour envoyer les mails en relayant au serveur SMTP de mon FAI. L'intérêt pour moi est qu'il me sert également comme serveur MX pour lmes domaines afin de stocker dans ma boite système.
  • fetchmail pour récupérer les mails POP de mes différents comptes.
  • procmail pour trier mes mails dans les différents dossiers.

Il est à noter enfin que tout (y compris mutt) se trouve sur le serveur pour pouvoir accéder à ma boite mail depuis n'importe où.

Compilation

J'ai choisi de recompiler la dernière version à cette date de Mutt (1.5.17) afin d'appliquer un patch permettant d'avoir une sidebar avec la liste des dossiers, ce qui simplifie l'utilisation.
J'ai activé après les options suivantes pour la compilation :

$ ./configure --with-sasl --with-slang --enable-hcache --enable-imap --with-ssl

Ainsi que vous pouvez le voir, j'ai activé le support d'IMAP afin de jouir des fonctionnalités de celui-ci pour mon compte IMAP.

Maildir

Pour récupérer les mails que vous aviez avec votre ancien client mail, si ce dernier supportait le format Maildir il est aisé de récupérer le répertoire et de l'utiliser. J'ai mis le miens en tant que ~/Mail/.

Petite subtilité pour KMail, la gestion des sous répertoires est un peu chiante, en effet ils sont dans ~/Mail/.inbox.directory/, pareil pour les sous sous répertoires, etc. Personnellement j'ai tout déplacé afin que chaque répertoire soit directement dans ~/Mail/. Ainsi j'ai :

3 rom1@sunigav ~/Mail $ ls
cache    ircu       maa-commits  sent-mail      Taches
CoderZ   libcaca    mail.sh      server.rdl.fr  Tâches
Gunther  libodbc++  MenAreAnts   Spam           Wormux
inbox    listen.sh  Nekeme

Nous verrons l'intérêt des scripts mail.sh et listen.sh plus tard.

Postfix

Rien de spécial à faire, installez le et configurer (simple, personnellement c'est l'installeur Debian qui m'a posé les bonnes questions).

Fetchmail

Créez le fichier ~/.fetchmailrc et remplissez le avec vos comptes à la manière :

set postmaster "rom1"
set bouncemail
set no spambounce
set properties ""
poll pop.pro.proxad.net with proto POP3
       user 'ident' there with password 'pass' is 'rom1' here ssl
poll pop.1and1.fr proto POP3
        user 'ident' there with password 'pass' is 'rom1' here ssl
...

N'oubliez pas de chmod 600 le fichier, en effet il contient vos mots de passe en clair !

Lancez maintenant fetchmail en démon en compte utilisateur avec la commande suivante :

$ fetchmail -d 30 -a -m "/usr/bin/procmail -Y -d %T"

Fetchmail va récupérer les mails toutes les trente secondes et va les passer à procmail.

Procmail

Créez le fichier ~/.procmailrc et remplissez le de la manière suivante :

# caractère verbeux de procmail ; mettre 'yes' permet d'avoir des messages
# supplémentaires
VERBOSE=no

SHELL=/bin/sh

# chemin d'accès aux exécutables ; en mettre le minimum, pour n'accéder qu'aux
# programmes indiqués dans le fichier de configuration
PATH=/bin:/usr/bin:/usr/local/bin

# répertoire où seront stockés les mails ; s'assurer que votre MUA sait y
# accéder aussi
MAILDIR=/home/rom1/Mail

# si procmail n'arrive pas à délivrer le courrier, cette boîte sera utilisée
# en dernier ressort : il vaut mieux définir cette variable !
ORGMAIL=/home/rom1/emergency-inbox

# boîte de réception par défaut
DEFAULT=$MAILDIR/inbox/new

# fichier de log de procmail ; si vous définissez cette variable,
# procmail gardera une trace de son exécution dans le fichier
# indiqué. À consulter périodiquement !
LOGFILE=$MAILDIR/.procmail.log

# Fichiers de règles à inclure
INCLUDERC=/home/rom1/.procmail/spam.rc
INCLUDERC=/home/rom1/.procmail/ml.rc

Les fichiers de règles doivent juste contenir les règles les unes à la suite des autres. Voici un exemple simple de quelques règles :

:0
* ^Subject: .*libcaca.*
$MAILDIR/libcaca/new

:0
* ^Subject: .*Your partner will worship you for it.*
$MAILDIR/Spam/new

:0
* ^To: .*menareants.*
$MAILDIR/MenAreAnts/new

Il faut tout d'abord écrire une première ligne avec :0 (ajouter à cela quelques flags si nécessaire), ensuite une ou plusieurs lignes commençant par * contenant une regexp, et enfin l'action à mener dans le cas où toutes les regexp matchent. Notez que là c'est très basique, les possibilités sont immenses. Par exemple dans un avenir proche je compte le coupler avec spamassassin.
Voir la doc de postfix.

Mutt

Le plus chiant reste la configuration de Mutt. J'ai personnellement été fouillé de tous les côtés, pompé des bouts de configurations d'autres personnes, lu la doc, etc. C'est tellement paramétrable que c'est pas facile d'y arriver tout seul au début je pense.

Ma config (malgré sa taille) reste basique et va probablement évoluer au fur et à mesure de mon utilisation.

Voici les différents fichiers :

  • .muttrc - Configuration principale qui contient les options générales
  • gpg.rc - Configuration GPG. En theorie il n'y a que la clef à changer dans pgp_sign_as
  • mailboxes.rc - Contient les définitions des différentes boites, ainsi que du compte IMAP. Ainsi qu'on peut le voir, je ne l'ai pas encore configuré, mais les paramètres commentés peuvent être utile comme base
  • theme.rc - Thème de mutt

Je ne commenterai pas plus que ça, après tout la doc de Mutt est très complète là dessus.

En tous cas relisez chaque paramètre et personnalisez, ne prenez pas ça comme une configuration fonctionnelle. Mutt a la particularité justement que personne n'aura exactement les mêmes besoins et donc la même conf.

Indicateur de nouveaux mails

Il est toujours très plaisant d'avoir une indication des nouveaux mails sur une partie visible en permanence de son bureau. La subtilité ici est que Mutt est lancé sur une autre machine.

La solution que j'ai trouvé est super crade, mais elle marche, ce qui est déjà ça.
L'idée est d'écouter un port côté serveur et de balancer le nombre de nouveaux mails et de couper la connexion. Côté client il suffit donc de se connecter à ce port pour récupérer la valeur.

Voici donc l'uniligne ~/Mail/listen.sh :

#!/bin/sh
while [ 1 ]; do socat EXEC:"/home/rom1/Mail/mail.sh" TCP4-LISTEN:4875,reuseaddr; done

Comme vous pouvez le voir, on peut faire plus sexy. Il exécute le script ~/Mail/mail.sh dont le contenu est le suivant :

#!/bin/sh
find ~/Mail/ | grep new | grep -v "new$" | grep -v Spam | wc -l

La séparation est nécessaire car socat exécute un fichier et pas des commandes (utilisation de execvp() et non de system()). De toute façon je trouve pas ça plus mal de séparer les deux, ça permet de réutiliser mail.sh ailleurs.

Vous pouvez constater que mail.sh est carrément dégueulasse, mais bon on fait avec. Notez le grep -v Spam qui permet de ne pas compter les éventuels nouveaux mails qui se situent dans le dossier Spam.

Côté client il suffit de faire exécuter la commande suivante :

socat TCP4:sunigav:4875 STDOUT

Merci en tous cas à lodesi pour l'astuce du socat car je connais aussi mal bash que les chiens qui lechent leur gode.

Conclusion

Voilà un super Mutt fonctionnel, qui envoie, reçoit et trie les mails, lit avec elinks les mails HTML (malheureusement il y en a) et m'affiche un indicateur dans la statusbar de ion3 :

mutt1.png

Pensez à bien configurer mailcap pour les applications à utiliser.

2 Responses to “Mutt et ses amis”


  • Sous Gentoo, pas besoin de compilation à la main, on peut appliquer un tas de patchs aux choix en éditant un simple fichier de configuration.
  • Perso, je conseille plutot d’utiliser maildrop que procmail. Ne serais que parce que maildrop a un format plus lisible pour les filtres ( ce qui me permet de gerer mes 200 dossiers plus facilement ).

    Et dans le même genre d’idée, je conseille plutot getmail que fetchmail, et de passer par un serveur imap afin de pouvoir utiliser le client de son choix ( ce qui me permet d’avoir des clients graphiques un peu partout, d’utiliser offlineimap pour avoir mes mails sur le portable, etc )

Leave a Reply




Bear