~rom1v/blog { un blog libre }

Trier ses mails directement sur le serveur (procmail)

Dans la continuité des articles consacrés à l’auto-hébergement des mails, je vais présenter quelque chose que je voulais mettre en place depuis un moment : le tri du courrier directement sur le serveur.

Introduction

Lorsqu’on est abonné à des mailing-lists ou qu’on reçoit des notifications de forums ou de blogs, il est inconcevable de garder tous ses mails dans un seul et même dossier, et impensable de les déplacer manuellement (à moins de passer 30 minutes par jour à les trier). Un tri doit être mis en place automatiquement, en se basant sur les en-têtes des mails reçus.

J’utilisais jusqu’à maintenant les filtres de messages de mon client mail, Evolution, mais ça n’était pas forcément approprié :

  • d’une part c’est très long avec un compte IMAP (les dossiers étant gérés côté serveur), car le client doit récupérer localement les nouveaux messages du serveur et les analyser ; s’il faut en déplacer un, il doit demander au serveur de le copier de la boîte de réception vers le dossier destination adéquat, puis demander de le supprimer de la boîte de réception, et enfin récupérer le messages déplacé… Rien que ça !
  • d’autre part, lorsqu’on accède à ses mails à partir de plusieurs endroits (par exemple le client mail, le webmail et le téléphone portable), il devient évident que ce ne peut pas être le rôle des clients de trier les messages…

C’est donc au serveur de placer les mails dans le bon dossier dès la réception. C’est ce que procmail permet de faire.

Les dossiers IMAP

Les dossiers IMAP sont des dossiers physiques contenus dans ~/Maildir (le répertoire des mails) qui respectent une structure particulière :

  • leur nom commence par . (ce sont des dossiers cachés) et les sous-dossiers “logiques” sont séparés par des . (par exemple, si je veux un dossier a contenant un sous-dossier b, le répertoire physique sera ~/Maildir/.a.b) ;
  • ils contiennent 3 sous-dossiers physiques : cur, new et tmp.

Pour les créer, il suffit d’utiliser maildirmake ou maildirmake.dovecot, à partir du répertoire ~/Maildir :

maildirmake.dovecot .forums.ubuntu-fr
maildirmake.dovecot .forums.developpez

pour obtenir l’arborescence suivante :

|-- .forums.developpez
|   |-- cur
|   |-- new
|   `-- tmp
`-- .forums.ubuntu-fr
    |-- cur
    |-- new
    `-- tmp

Il est également possible de les créer graphiquement grâce à un client mail.

Configuration de postfix

Il faut indiquer à postfix que procmail va s’occuper de trier les mails, en lui précisant dans /etc/postfix/main.cf :

mailbox_command = /usr/bin/procmail

Il faudra ensuite recharger la configuration :

sudo /etc/init.d/postfix reload

Définir les règles de tri

Tout se passe dans le fichier (à créer) ~/.procmailrc, qui contient deux parties : la définition des variables et la définition des “recettes” (les règles de tri).

Les variables

Pour les variables, copiez simplement ceci (en décommentant les 2 premières lignes si vous voulez des logs).

#VERBOSE=yes
#LOGFILE=.procmail.log
SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=Maildir/
DEFAULT=./

Les recettes

Les recettes sont écrites sous la forme suivante :

:0 [drapeaux] [ : [verrou_local] ]
<zéro ou plusieurs conditions (une par ligne)>
<exactement une ligne d'action>

Les conditions commencent toutes par *, suivie d’une expression régulière. Pour qu’une recette exécute l’action définie, il faut que le mail en question valide toutes les conditions.

Pour faire simple, nous allons simplement créer des règles qui déplacent des mails dans des dossiers. Pour définir une telle action, il suffit d’écrire le nom du dossier, en terminant la ligne par / (très important, cette convention indique à procmail que le dossier est au format maildir).

Un exemple étant plus parlant, voici une règle qui déplace toutes mes notifications de blog dans un dossier blog :

:0
* ^From: .*<wordpress@blog\.rom1v\.com>$
.blog/

Cet autre exemple permet d’envoyer une copie des mails validant les conditions à des adresses e-mails spécifiées (je m’en sers pour transférer les messages vocaux de mon répondeur téléphonique sur plusieurs adresses) :

:0c
* ^From: telephonie\.freebox@freetelecom\.com$
! autre@email.com

Résultat

Au final, voici un extrait de mon fichier ~/.procmailrc (je n’ai pas mis toutes les règles, c’est juste pour donner quelques exemples) :

#VERBOSE=yes
#LOGFILE=.procmail.log
SHELL=/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
MAILDIR=Maildir/
DEFAULT=./

:0
* ^From: .*<wordpress@blog\.rom1v\.com>$
.blog/

:0
* ^Reply-To: .*<[0-9]+@bugs\.launchpad\.net>$
.bugs.launchpad/

:0
* ^From: .*<dev\.null@ubuntu-fr\.org>$
.forums.ubuntu-fr/

:0
* ^List-Id: <april\.april\.org>$
.ml.april/

Commentaires

Kane

Simplement génial !

Je vais bientôt me prendre un Ve-Hotech, histoire de dé-engooglé ma femme et moi… C’est le genre de “truc” qui vont m’être vitaux.

Vincent-Xavier JUMEL

Pourquoi ne pas utiliser une solution documentée et standardisée telle que sieve ?

®om

@Vincent-Xavier JUMEL

Pourquoi ne pas utiliser une solution documentée et standardisée telle que sieve ?

En voulant mettre en place le filtrage de mails sur le serveur, j’hésitais entre procmail et sieve, et ne connaissant ni l’un ni l’autre, il fallait en choisir un.

Peux-tu me dire les avantages et les inconvénients de sieve par rapport à procmail?

Est-ce que ce serveur est chez un hébergeur, ou bien est-ce une machine allumée chez toi en permanence ? Dans ce dernier cas, as-tu une IP fixe ?

Sinon, j’utilise aussi procmail pour le tri de mes mails, mais sur mon poste de travail, sans passer par un MTA comme Postfix. Un bon vieux fetchmail peut aussi être configuré pour transmettre les mails à cet utilitaire.

Mais il est vrai que j’utilise Mutt comme client mail, je ne pense pas que cette méthode soit compatible avec un client plus moderne comme Thunderbird.

Maintenant, il serait honnête de préciser que la syntaxe des .procmailrc est loin d’être limpide :-) Heureusement, il y a de nombreux tutos sur le web, et la page de man procmailex, que tout le monde oublie.

®om

Mon serveur est sur une machine chez moi, j’ai une IP fixe.

Merci pour l’astuce man procmailex.

@®om

En voulant mettre en place le filtrage de mails sur le serveur, j’hésitais entre procmail et sieve, et ne connaissant ni l’un ni l’autre, il fallait en choisir un. Peux-tu me dire les avantages et les inconvénients de sieve par rapport à procmail?

De mon point de vue, sieve est beaucoup plus simple que procmail. Il se limite au trie de courrier et puis c’est tout. Du coup la syntaxe est beaucoup plus simple, même intuitive je dirais (un exemple : http://www.systemx.fr/linux/cyrus/sieve/sieve.html).

Du fait qu’il soit standardisé, plusieurs serveurs (dovecot, cyrus IMAP…) implémente le protocole manageSieve qui permet d’éditer les scripts sieve depuis ton client mail (au moins thunderbird et kmail le supporte). Toujours pratique car je me rend compte que je suis toujours a ajouter/modifier mes filtres.

Par contre, quand je l’ai mis en place, j’ai trouvé très peu de doc sur le sujet (par rapport à procmail).

Guyome

Alors pour utiliser sieve il faut que ce soit dovecot (ou autre) qui délivre les mails, ce qui demande quelques modification de la configuration du MTA. Après les règles sont contenues dans un fichier dans le home des utilisateurs.

Pour exemple (ubuntu/postfix/dovecot/pas d’utilisateur virtuel),

tu ajoutes

mailbox_command = /usr/lib/dovecot/deliver

dans /etc/postfix/main.cf

puis tu modifies /etc/dovecot/dovecot.conf comme suit

protocol lda {
    mail_plugins = cmusieve
}

et il te restre à mettre les règle que tu veux dans ~/.dovecot.sieve.

Ps: j’ai eu quelque pb de droits avec les logs

jozzy-online

beaucoup appris

[…] et d’ajouter la règle suivante dans ~/.procmailrc (plus d’infos) : […]

VIncent-Xavier JUMEL

@billux

De mon point de vue, sieve est beaucoup plus simple que procmail. Il se limite au trie de courrier et puis c’est tout. Du coup la syntaxe est beaucoup plus simple, même intuitive je dirais (un exemple : http://www.systemx.fr/linux/cyrus/sieve/sieve.html). Du fait qu’il soit standardisé, plusieurs serveurs (dovecot, cyrus IMAP…) implémente le protocole manageSieve qui permet d’éditer les scripts sieve depuis ton client mail (au moins thunderbird et kmail le supporte). Toujours pratique car je me rend compte que je suis toujours a ajouter/modifier mes filtres. Par contre, quand je l’ai mis en place, j’ai trouvé très peu de doc sur le sujet (par rapport à procmail).

La lecture des RFC donne ce qu’il faut savoir pour créer des règles :)

[…] et d’ajouter la règle suivante dans ~/.procmailrc (plus d’infos) : […]

[…] trouver des fonctionnalités à mettre en place (un webmail tel que RoundCube, un anti-spam, le tri des mails sur le serveur, une authentification […]

Les commentaires sont fermés.