lalahop

À la recherche d’un MUA

Il y a 2 mois, je décidais d'utiliser exclusivement mes serveurs de mails personnels ou ceux d'entités de confiance. Adieu donc les Hotmail, Gmail, FAI, ... Et vous verrez plus loin que mon choix est antérieur au NSA-gate. 😉 Histoire de tout faire en une seule fois, j'ai harmonisé les boîtes mail restantes et notamment le protocole de consultation (IMAP partout) et je me suis intéressé aux différentes manière de trier mes mails. Et, forcement, j'ai décidé de comparer les clients mail (MUA) existants pour voir si un autre MUA conviendrait mieux à mes besoins que Icedove (aka Thunderbird chez Debian). Je vais tenter de résumer tout ça dans ce billet bordelique.

Si vous êtes tombé sur ce billet alors que vous cherchez à mettre en place votre propre serveur mail, je vous redirige vers la partie « Courrier électronique » de wiki.auto-hebergement.fr et vers Postfix tranquille chez Karchnu pour l'installation basique et vers Sécuriser un serveur de mail chez Tetaneutral.net pour les techniques avancées.

Table des matières

FAQ

Avant d'entrer dans le vif du sujet, je vais répondre, de manière publique, aux deux questions que l'on m'a le plus souvent posées :

  • « Comment as-tu réussi la transition si vite et à faire en sorte que les gens ne t'écrivent plus que sur les nouvelles adresses ? ». Je n'ai pas fait la transition en seulement deux petits mois :
    • J'ai prévenu depuis janvier 2013 qu'à partir de juillet 2013, je ne recevrai plus les mails sur les anciennes adresses. Et j'ai été ferme sur le fait que je n'irai pas sur le webmail les lire. M'envoyer un mail aux anciennes adresses, c'est perdu ! Pour le reste, à savoir les mailing-list (liste de discussion) auxquelles je suis abonné et les entreprises/administrations/associations auxquelles j'ai donné mon adresse, j'ai effectué le changement d'adresse sur leur site web dès janvier et cela s'est très bien passé ... sauf pour 2 banques (une personnelle, l'autre pour une association) dans lesquelles il faut prendre un rendez-vous avec un conseiller pour changer une adresse mail ... Oui, en 2013, oui, oui, oui !
    • Entre janvier et juillet, à chaque fois que j'ai reçu un mail sur ce qui allait devenir une ancienne adresse, je répondais au mail, en indiquant, dès le début du mail, qu'il ne fallait plus utiliser cette adresse et en positionnant un en-tête « reply-to » (Réponse à) contenant la nouvelle adresse.

    Bilan : seulement 2 personnes n'ont pas compris et se sont plaintes récemment que je n'ai pas répondu à leurs mails ...

  • « Tu ne perds pas de mails ? ». Quasiment non. J'ai demandé à un maximum de personnes, qui utilisent des fournisseur d'adresses mail bien différents, de tester et il s'avère que le seul fournisseur chez qui mes mails tombent dans le dossier SPAM, c'est le casse-couille de la profession, à savoir, Hotmail ! Cela ne concerne que le premier mail, tant que la personne qui possède l'adresse Hotmail ne vous a jamais répondu ou écrit de sa propre initiative. Non, je ne suivrai pas leur procédure pour me faire autoriser : le mail est normalisé, je n'ai pas à suivre les instructions d'une entreprise particulière pour envoyer des mails ! Je pense avoir mis en place suffisamment de procédés normalisés (SPF, DKIM, reverse v4/v6 corrects, TLS, ...) pour que l'on se doive de me foutre la paix !

Choix d'un MUA

Je cherchais un MUA qui réunit ces quelques critères :

  • Logiciel libre.
  • Un client lourd, pas un webmail.
  • KISS. Je n'ai pas besoin d'avoir un agenda intégré, j'ai déjà un agenda. Je n'ai pas besoin d'avoir un gestionnaire de TODO intégré. Bref, je veux juste du mail.
  • Support de la fonctionnalité IDLE d'IMAP. Cela permet au client d'indiquer au serveur qu'il souhaite être notifié en temps-réel de l'arrivée de nouveaux mails.
  • Stockage des mails au format Maildir. Un mail par fichier par opposition à Mailbox avec lequel un fichier stocke toute une boîte. Maildir est réputé plus efficaces sur un volume moyen de mails. Mais surtout, un mail par fichier permet une sauvegarde impeccable et une restauration facile quand le MUA pète les plombs et dégage un mail ou mélange les en-têtes d'un mail avec le contenu d'un autre ... Si, si, si, ces deux cas me sont déjà arrivés avec Thunderbird. Heureusement, j'avais une sauvegarde mais du coup, les mails n'apparaissent plus dans le client. Pour les relire, il faut que j'ouvre la sauvegarde. Et c'est moyen-moyen.

L'ergonomie est un critère secondaire.

Si l'on exclut les clients mail dont l'implémentation de Maildir est un patch dont on ne sait pas si c'est stable ou non, il reste :

  • Mutt
  • KMail
  • Evolution
  • Icedove (aka Thunderbird)

Voici les avantages et les inconvénients que j'ai trouvé à chaque client.

Mutt :

  • + Je l'utilise déjà mais je souhaite quand même utiliser un autre client en parallèle le temps de finir d'apprendre les combinaisons de touches les plus utiles au quotidien. Histoire d'être efficace et surtout histoire de ne pas faire d'erreurs de manip' du genre « oooops, tiens, cette boite mail était vide avant ? ». 😛
  • + KISS.
  • + Contrairement à tous les autres MUA, l'affichage des nouveaux mails est efficace : ouvrir un dossier et pouf, la sidebar affiche tous les nouveaux messages dans tous les dossiers. Avec Icedove/Evolution, je suis obligé de survoler l'intégralité des dossiers pour voir les nouveautés dans les dossiers.
  • + Léger ... Il ne prend pas 95 % du CPU pendant plusieurs dizaines de secondes pour relever une BAL.
  • + Maildir par défaut (voir dans Mutt/cache/BAL/).
  • - Je suis le seul avec qui Mutt segfault parfois. 🙁

KMail :

  • - Bien que les devs et la doc indiquent que KMail supporte IMAP IDLE, je n'ai pas trouvé ça fonctionnel.
  • - L'ergonomie de l'interface est vraiment, vraiment mauvaise. Pareil pour la mise en place d'un compte ... L'utilisation au quotidien est juste affreuse.

Evolution :

  • - N'est pas KISS : il fait aussi TODO, agenda, ...
  • - Pour voir si j'ai de nouveaux mails dans mes dossiers, je suis obligé de survoler l'intégralité des dossiers pour voir les nouveautés dans les dossiers.
  • + Maildir.
  • - Niveau ergonomie, on n'est pas loin de KMail ... Notamment, quand le texte d'un mail dépasse la fenêtre, impossible de scroller, il faut forcement utiliser l'ascenseur ou les flèches du clavier ...
  • - Il reste quelques petits bugs, par-ci, par-là. Il y a des paramètres (mapping/port d'un serveur par exemple) qui sautent sans raison lors d'un re-démarrage du logiciel donc il faut insister plusieurs fois pour que ça soit bien pris en compte.
  • - Evolution range les mails/paramètres/autre dans pas moins de 4 dossiers dans le home directory. Bon courage pour la sauvegarde ! Au moins Thunderbird et Mutt mettent tout dans un même dossier.

Icedove/Thunderbird :

  • + Le poids des habitudes : je n'ai connu que Thunderbird en client mail graphique donc y renoncer maintenant s'avère difficile.
  • + Quasiment KISS (mail + newsgroups sauf si des extensions sont installées (iceowl pour faire agenda, par exemple).
  • - Pour voir si j'ai de nouveaux mails dans mes dossiers, je suis obligé de survoler l'intégralité des dossiers pour voir les nouveautés dans les dossiers. ÉDIT du 19/09/2013 à 20h05 : Lire les commentaires de JB, le pourquoi du comment y est tout bien expliqué. Solution provisoire : mettre « mail.server.default.check_all_folders_for_new » à « true », solution définitive à long terme : IMAP NOTIFY (RFC 5465). Fin de l'édit
  • - L'implémentation de Maildir est récente, activable via de la bidouille dans les fichiers de configuration. Il y a eu des bugs importants ces derniers temps (déplacement foireux (l'original n'est pas effacé), une mise à la corbeille foireuse) et il en reste encore d'après le bugtracker (même si certains sont plus des PEBKAC que des bugs). Vu qu'elle est expérimentale, cette implémentation peut subire des changements radicaux (ie : les devs peuvent penser « ceux qui l'activent le font en connaissance de cause donc on peut se permettent de casser la compatibilité par la suite, les utilisateurs sont des beta-testeurs, ils s'attendent à perdre éventuellement des mails »).
  • - Lourdeur : 95 % du CPU pendant plusieurs dizaines de secondes pour juste parler IMAP ?! O_O

En fait, je me suis rendu compte que la première partie de la devise de Mutt, « All mail clients suck. », est vraie.

En conséquence, en attendant de savoir manier totalement Mutt pour mes usages quotidiens, j'ai choisi de continuer à utiliser Icedove/Thunderbird sans Maildir. En ce qui concernant les boîtes mail que j'auto-héberge (la majorité), j'ai une sauvegarde issue du serveur donc elle est au format Maildir. Pour les autres, j'ai la sauvegarde du dossier Icedove donc Mailbox mais sauvegarde quand même.

Tri du courrier

Il existe plein de mécanismes différents pour trier et filtrer ses mails.

Chaque MUA permet de le faire avec sa syntaxe précise.

Il est aussi possible d'utiliser des langages côté serveur. Cela permet d'avoir les mêmes règles de tri/filtrage quel que soit le client utilisé (client lourd, webmail, ...) puisque les mails sont triés sur le serveur et non plus par le client. Et c'est portable (si l'on change de MUA, que l'on oublie de sauvegarder sa config, ...). Il existe plein de mécanisme côté serveur : procmail, maildrop, Sieve, ...

Je me sers de Sieve, via Dovecot LDA, sur un de mes serveurs de mail et de procmail sur les 2 autres. Je m'en sers exclusivement pour déplacer un mail dans un dossier en fonction d'un critère : comparaison de l'en-tête « List-Id » pour identifier un mail d'une liste de discussion, comparaison du delimiteur dans l'adresse mail du destinataire pour identifier l'origine, une communauté, un service, ... ou pour supprimer les mails envoyés par des réseaux asociaux.

Pour les avantages et les inconvénients de procmail :

  • + Offre de grandes possibilités ;
  • - La courbe d'apprentissage est raide ;
  • - N'est pas normalisé.
  • - Pour modifier les règles, il faut avoir accès au serveur.

Pour les avantages et les inconvénients de Sieve :

  • + Normalisé. Plusieurs implémentations sont disponibles (Dovecot, Cyrius, ...) ;
  • + Facilité de prise en main / human-readable ;
  • - Moins de possibilités pour les utilisateurs expérimentés et exigeants.
  • + Pour modifier les règles, on peut utiliser Manage Sieve, un protocole dédié. Une extension Thunderbird existe pour cela mais je ne sais pas ce qu'elle vaut : j'ai un shell sur mes serveurs persos, quand même :P.

Utiliser procmail et/ou Sieve

procmail

Pour utiliser procmail avec Postfix, il suffit de rajouter ce qui suit au main.cf :

mailbox_command = /usr/bin/procmail -f- -a $USER -a $EXTENSION

« $EXTENSION » permet de fournir le texte après le délimiteur (exemple : toto dans guigui+toto@) à procmail. Cela permet d'écrire des règles qui matcheront cet élément. Source : Postfix Configuration Parameters - Mailbox command. ÉDIT du 19/09/2013 à 19h35 : Avant de me faire troller, je précise que le délimiteur n'est pas forcement le caractère « + » et qu'il peut être changé. Avec Postfix, il faut voir ça avec la directive de configuration « recipient_delimiter ». Fin de l'édit

Ensuite, il faut rajouter les instructions générales et les recipes (les règles) dans un fichier (.)procmailrc. Il peut se trouver dans /etc/ et il s'appliquera en conséquence à toutes les boîtes mail hébergées sur le système. Il peut se trouver dans le home directory (.procmailrc) d'un utilisateur auquel cas il s'appliquera uniquement à la boîte aux lettres de cet utilisateur. Si les deux existent, procmail exécutera d'abord celui contenu dans /etc/ puis celui contenu dans le home directory. Source : man procmail (« If no rcfiles and no -p have been specified on the command line, procmail will, prior to reading $HOME/.procmailrc, interpret commands from /etc/procmailrc (if present). »).

Du coup, je me sers de /etc/procmail pour indiquer des instructions générales (log, dossier par défaut si le dossier précisé dans une règle n'existe pas, ...) dans /etc/procmailrc. Les règles se trouvent dans mon home directory. Voici, par exemple, le contenu de mon fichier /etc/procmailrc :

SHELL=/bin/false
PATH=/bin:/usr/bin:/usr/local/bin
 
LOGFILE=/var/log/mail/procmail.log
VERBOSE=no
 
DROPPRIVS=yes
 
LOGNAME=$USER
MAILDIR=$HOME/Maildir
DEFAULT=$HOME/Maildir/new
ORGMAIL=$MAILDIR/new

Attention :

  • Sur le web, j'ai déjà vu des procmailrc contenant « DEFAULT=$HOME/Maildir/cur ». Cela me semble être incorrect. Le format Maildir indique que le MTA/MDA place le mail dans tmp durant sa réception puis le déplace dans new dès la réception complète. Seul le MUA déplace le mail dans cur. Or, procmail n'est pas un MUA. Source : Maildir sur Wikipedia.
  • Procmail s'enlève les droits dès qu'il parse l'instruction « DROPPRIVS ». Donc la mettre avant « LOGFILE » empêche procmail de logger (dans /var/log/* j'entends).

Quelques exemples de règles :

DELIM = $2
 
# Les listes de discussion de la FFDN seront rangées dans le dossier FFDN 
:0:
* ^List-Id:.*lists.ffdn.org
$HOME/Maildir/.FFDN/
 
# Tout ce qui arrive sur l'adresse guigui+toto@ va dans le dossier toto
:0:
* DELIM ?? ^^toto^^
$HOME/Maildir/.toto/

## Pour dégager les réseaux asociaux
# LinkedIn - premier mail
:0H:
* ^Subject:.*Check out my profile on LinkedIn.*
/dev/null

# LinkedIn - relances
:OH:
* ^From: .*invitations@linkedin.com
/dev/null

## Fin dégager les réseaux asociaux

Pour apprendre à écrire vos règles procmail, je vous recommande les ressources suivantes :

Sieve avec Dovecot LDA

Pour utiliser Dovecot LDA avec Postfix, il suffit de rajouter ce qui suit au main.cf :

mailbox_command = /usr/lib/dovecot/dovecot-lda -f "$SENDER" -a "$RECIPIENT" -d "$USER"

Il faut également ajouter ce qui suit dans /etc/dovecot/dovecot.conf (ou dans les bons fichiers dans conf.d pour ceux qui veulent faire propre et version 2 compliant) :

protocol lda {
        mail_plugins = sieve
        postmaster_address = postmaster@votredomaine.example
}
 
plugin {
         sieve = ~/.dovecot.sieve
}

Source : The Perfect Server - OpenSUSE 12.2 x86_64 (Apache2, Dovecot, ISPConfig 3 - Page 4.

Ensuite, il ne reste plus qu'à placer les règles dans ~/.dovecot.sieve (qui est le fichier que nous avons indiqué dans la directive « sieve » dans dovecot.conf). Le log s'ajoute directement dans le log général, avec les tentatives de connexions IMAP/POP.

Quelques exemples de règles :

require ["fileinto", "envelope", "subaddress"];
 
# Les listes de discussion de la FFDN seront rangées dans le dossier FFDN 
if anyof (
	header :contains "List-Id" "lists.ffdn.org",   # Si le mail vient de la ML 
	header :contains "Subject" "[FFDN]"            # ou réponse hors-liste (fictif)
) {     
	fileinto "FFDN";
	stop; # Pas la peine de parcourir le reste des règles
}
 
# Tout ce qui arrive sur l'adresse guigui+toto@ va dans le dossier toto
if envelope :detail "to" "toto" {
	fileinto "toto";
	stop;
}

# Pour dégager les réseaux asociaux
if anyof (
       # LinkedIn (premier mail + relances)
       header :is ["Subject"] "Check out my profile on LinkedIn",
       address :is ["From"] "invitations@linkedin.com"
)
{
       discard;
       stop;
}

Pour apprendre à écrire vos règles Sieve, je vous recommande les ressources suivantes :

Trucs & astuces

Icedove/Thunderbird

Si vous utilisez les délimiteurs dans votre adresse mail (exemple : toto+commerçantA@votredomaine.example ou toto+listeDeDiscussionA@votredomaine.example) pour trier votre courrier plus facilement et savoir qui a revendu votre adresse mail, vous pouvez avoir besoin d'envoyer des mails avec comme adresse d'expéditeur, l'adresse complète soit toto+listeDeDiscussionA@votredomaine.example et non pas uniquement toto@votredomaine.example. C'est typiquement le cas pour les listes de dicussions : le gestionnaire de la liste (sympa, mailman, ...) n'acceptera vos mails que s'ils contiennent l'adresse d'expéditeur indiquée lors de votre inscription à la liste.

Evidemment, vous n'allez pas créer autant de compte dans votre MUA que d'adresse mail différente : Thunderbird (comme les autres MUA) permet de lier plusieurs identités à un compte mail. Voir : Multiple identities per e-mail account.

Paramètres des comptes -> Sélectionner le compte concerné -> Gérer les identités -> Ajouter -> saisir juste le nom et l'adresse mail avec le délimiteur -> Ok *3.

Créer des adresses mail temporaires auto-hebergées

Voir : Service d'adresse de redirection temporaire. Je trouve ça excellent !

Le mécanisme d'alias vous permet de créer des adresses temporaires pour votre domaine. Les alias virtuels permettent de créer des alias qui sortent de votre domaine, pour des amis, une petite communauté, ... Il n'est pas nécessaire d'utiliser le script PHP (sauf si vous ouvrez votre service à tout le monde, bien sûr) : il suffit d'ajouter/supprimer des alias.

Mutt

Sous Mutt, impossible de se passer de mutt-sidebar. Sous Debian, c'est le package mutt-patched qu'il faut installer.

Pour vous faire une config Mutt qui ne craint pas trop, je vous recommande ces deux ressources : Desktop in a shell: mutt et Mutt sur le wiki Archlinux.

Pour utiliser plusieurs adresses mail sans les rediriger sur une seule, il suffit d'utiliser les profiles. Je ne sais pas pourquoi je lis à droite et à gauche « hola, c'est compliqué, utilises des alias plutôt » ... Le commutateur « -F » permet de préciser un muttrc différent de ~/.muttrc. Il suffit donc de créer autant de profiles (et donc de fichiers) que de boîtes aux lettres différentes, contenant chacun les informations nécessaires pour utiliser une BAL (paramètres généraux, IMAP, SMTP, ...). Tout en utilisant la directive « source » pour inclure un fichier contenant les directives communes à tous les comptes mail. Il suffit ensuite d'utiliser screen et un alias. Exemple : l'alias « screen-mail » ouvre X onglets et lance un « mutt -F profile-X » dans chaque. On peut aussi utiliser uniquement des alias : Kevin's Mutt Tips and Tricks - Mutt

  1. Hello,
    Concernant Thunderbird/Icedove, il est possible de vérifier la présence de nouveaux mails à intervalle régulier à l’aides des options « mail.server.server1.check_new_mail » et « mail.server.default.check_time »

    De même, il est possible, même si désactivé par défaut, de réaliser cette vérification dans tous les dossiers à l’aide de l’option de configuration « mail.server.default.check_all_folders_for_new »

    Mes 2 cents

    • Ce qui m’étonne le plus, c’est qu’avec IMAP IDLE, on ne devrait plus avoir à faire du polling régulièrement.

      IMAP IDLE fonctionne, Icedove m’affiche bien les nouveaux mails aussitôt qu’ils arrivent … mais oublie certains dossiers. Pourtant, je suis abonné à tous les dossiers … Là où ça me dépasse, c’est que ce ne sont pas toujours les mêmes dossiers qui sont oubliés …

      Je viens de vérifier : tous mes « mail.server.serverX.check_new_mail » sont à « true ». Tous mes « mail.server.serverX.check_time » sont à « 2 », comme je l’ai configuré dans les paramètres des comptes.

      « mail.server.default.check_time » est à « 10 » mais du coup, cela ne s’applique pas.

      « mail.server.default.check_all_folders_for_new » était à « false ». Je viens de passer à « true ». Je teste et je ferai un feedback. Merci. 🙂

      • Hello,
        Oui, j’avoue que c’est assez rageant.
        Confronté au même problème, voici ce que j’avais pu trouver comme explication:

        IMAP IDLE is limited to watching only one mailbox/folder per connection. That is
        just the way it works. If Thunderbird is using only 5 connections for IMAP IDLE,
        then it is only active for 5 folders. I’m not sure how it decides which 5 folders to
        watch. If you want to watch 45 folders with IMAP IDLE, you need to have 45 open
        connections.

        Source: https://code.google.com/p/k9mail/issues/detail?id=1255

        D’où mon paramétrage actuel qui consiste à forcer la vérif sur tous les dossiers

      • La solution ultime pourrait être IMAP NOTIFICATION introduit dans Dovecot 2.2
        Malheureusement pas dans Thunderbird/Icedove 🙁

        https://bugzilla.mozilla.org/show_bug.cgi?id=479133

        • Je ne savais rien de tout ça.

          Je viens de parcourir le RFC 5465 (IMAP NOTIFY) : ça m’a l’air juste génial. \o/

          Mais bon … Si aucun MUA ne supporte … Et comme j’utilise le dépôt stable sur mes serveurs, Dovecot 2.2, ce n’est pas pour tout de suite.

          Une autre piste, c’est l’option « mail.server.serverX.max_cached_connections » (ça se configure aussi dans les options avancées d’un serveur) de Thunderbird/Icedove. Source : http://web.archive.org/web/20041024154921/http://help.netscape.com/kb/consumer/19981005-3.html

          Il faut voir en fonction des cas et des usages si ça convient. Typiquement, exemple personnel, le compte mail sur lequel j’ai le plus grand nombre de dossiers (et donc où ce problème me dérange le plus), c’est mon compte mail auto-hebergé … donc 5 ou 45 connexions sur mon LAN, ça m’est bien égal. Par contre, autoriser 45 connexions par compte sur mon laptop, ça ne va pas le faire.

          • oui, d’autant que les connexions se font par adresses IP. Donc, dans mon cas, laptop + Téléphone + Tablette = saturation du dovecot 🙂

            Pour Thunderbird, pas trouvé mieux que faire vérifier tous les dossiers.

            Vivement une extension IMAP NOTIFY pour Thunderbir/Icedove + Dovecot 2.2 dans backport 🙂

      • « mail.server.default.check_all_folders_for_new » juste marche, merci. 😀

        J’ai mis à jour le billet.