Accueil

Filtrer vos mails avec procmail

Par Serge.

Ce document est sous licence Licence pour Documents Libres de la guilde des doctorants.

Sommaire

Présentation

Procmail est un outil trés puissant pour filtrer les mails qui s'interface trés simplement avec Fetchmail, Sendmail, Postfix, Exim et bien d'autres programmes. Avec procmail vous allez pouvoir classer, supprimer, renvoyer ou même rediriger vos courriers electroniques vers un autre programme et tout cela trés simplement grâce à des "recettes" procmail.

Ce document se veut une introduction à l'utilisation de ce logiciel.

Variables procmails

Procmail utilise le fichier .procmailrc pour sa configuration, ce fichier doit se trouver dans le répertoire home de l'utilisateur. Avant d'étudier les recettes procmail, nous allons faire un tour rapide des variables procmail qui vont nous permettre de le configurer correctement.

PATH : le chemin de recherche des fichiers exécutables. Il indique les dossiers où procmail peut trouver les programmes qui peuvent lui être utile ;

LOGFILE : le chemin du fichier de log pour procmail, utile pour diagnostiquer les problémes ;

VERBOSE : permet d'avoir des messages procmail supplémentaires si vous fixez cette variable à yes. Également utile pour diagnostiquer des problèmes ;

ORGMAIL : Si pour une raison ou une autre procmail n'arrive pas à délivrer un message, il le déposera dans cette boîte aux lettres. Trés utile pour éviter de perdre des courriers !

MAILDIR : chemin de la boîte aux lettres de l'utilisateur. Si ce chemin est un dossier alors la boîte aux lettres sera au format Maildir. Si le chemin est un fichier, alors la boîte aux lettres sera au format mbox ;

INCLUDERC : Fichier à inclure. Permet de découper la configuration ou les régles de filtrage de procmail en plusieurs fichiers ;

DEFAULT : boîte aux lettres par défaut ;

Voici un exemple de configuration de procmail:

PATH=$HOME/bin:/usr/bin:/usr/ucb:/bin:/usr/local/bin:.
MAILDIR=$HOME/Maildir/  # C'est un répertoire, donc format Maildir
DEFAULT=$MAILDIR/
LOGFILE=$HOME/.procmail_log
VERBOSE=yes

D'autres variables existent, mais soit présentent un intérêt limité, soit sortent du cadre de cet article. Référez-vous à la documentation officielle de procmail pour plus d'informations.

Les recettes

Comme nous l'avons évoqué, procmail utilise des recettes pour filtrer vos mails. Voyons cela plus avant...

Format des recettes

:0 [drapeaux] [ : [lock] ]
<condition à remplir (une par ligne)>
<action à entreprendre (une seule)>

Les drapeaux

Par défaut procmail va chercher la condition à remplir sur le contenu entier du courier (en-tête, corps du message, ...). Les drapeaux permettent de changer ce comportement. Les drapeaux les plus utilisés sont les trois suivants :

D'autres drapeaux existent, ils sont expliqués dans l'aide en ligne de procmail

Lock

Permet de vérrouiller pour eviter de corrompre des boîtes aux lettres en écrivant simultanément plusieurs courriers.

Les conditions

Les conditions permettent de tester si le courrier correspond à ce que l'on veut. Une condition commence par *, suivi de l'expression rationnelle spécifiant la condition. S'il y a plusieurs conditions (plusieurs lignes) il faut alors que toutes les conditions soient remplies pour que la recette soit prise en compte.

Action

L'action à effectuer si les conditions sont remplies. Celle-ci consiste soit à délivrer le courrier, soit à le rediriger vers un programme externe, soit à le renvoyer.

Exemples de recettes

Prenons quelques cas concrets et souvent bien utiles !

Supprimer les doublons

Grace à l'outil formail on peut detecter les doublons sur le message-id (option -D de formail), procmail redirige alors tous les mails à formail, il n'y a pas de condition spécifique.

:0 Wh: msgid.lock
| formail -D 8192 msgid.cache

Scanner les courriers avec spamassassin

Redirige tous les courriers vers spamassassin pour identifier les pourriels.

:0fw: spamassassin.lock
* < 2560000
| spamc

Déplacer les spams identifié par spamassassin dans un dossier SPAM

Nous recherchons l'en-tête X-Spam-Flag: YES que rajoute Spamssassin sur detection de Spam, et nous délivrons alors le courrier dans le sous-répertoire SPAM de la boîtes aux lettres.

:0
* ^X-Spam-Flag: YES
$MAILDIR/.SPAM/

Déplacer dans un dossier suivant l'expéditeur

Imaginez que vous soyez inscrit à la liste aide@slackware-fr.org et que vous vouliez ranger les courriers de cette liste de diffusion dans le sous-répertoire slackware-fr de votre boîtes aux lettres :

:0
* ^From.*aide@slackware-fr.org
$MAILDIR/.slackware-fr/

Supprimer le courrier suivant le sujet

Par exemple, on supprime ici tous les courriers dont le sujet contient « viagra » :

:0
* ^Subject: .*viagra.*
/dev/null

Exemple de .procmailrc

Reprenons tous nos exemples pour former notre fichier .procmailrc:

PATH=$HOME/bin:/usr/bin:/usr/ucb:/bin:/usr/local/bin:.
MAILDIR=$HOME/Maildir  # C'est un répertoire, donc format Maildir
DEFAULT=$MAILDIR/
LOGFILE=$HOME/.procmail_log
VERBOSE=yes

:0 Wh: msgid.lock
| formail -D 8192 msgid.cache

:0fw: spamassassin.lock
* < 2560000
| spamc

:0
* ^X-Spam-Flag: YES
$MAILDIR/.SPAM/

:0
* ^From.*aide@slackware-fr.org
$MAILDIR/.slackware-fr/

:0
* ^Subject: .*viagra.*
/dev/null

Pour finir

Ceci n'est qu'un bref aperçu des capacités de procmail et a juste pour but de vous familiariser avec celui-ci. À vous maintenant de lire de façon plus approfondie la documentation de procmail et d'écrire vos propres conditions suivant vos besoins !

Thèmes : #articles #logiciels #reseau #securite #serge

Sauf indication contraire, ce document est placé sous licence CC-BY-SA 3.0.