SOMMAIRE :
- 1. INTRODUCTION
- 2. LE FICHIER ~/.forward
- 3. LE FICHIER ~/.procmailrc
- 4. QUELQUES EXEMPLES DE RECETTES PROCMAIL
- 4.1 Mettre à la poubelle tous les messages que mon procmail a envoyé et auquel un système automatique a répondu
- 4.2 Mettre à la poubelle tous les messages qui contiennent un fichier .exe, .dot ou .vbs
- 4.3 Répondre à ceux qui envoient des messages contenant des .doc et des .ppt
- 4.4 Répondre enfin à ceux qui envoient des messages en HTML, en quoted-printable ou contenant une vcard alakon
- 4.5 Extensions
- 5. QUELQUES EXPLICATIONS
- 6. LIENS
- 7. FICHIERS
1. INTRODUCTION :
Procmail est un MDA (Mail Delivery Agent) qui permet de faire des filtres pourvant servir dans plusieurs cas. Typiquement il est possible de filtrer les messages des importuns et les mettre automatiquement à la poubelle, trier les messages provenant de diverses mailing-listes, etc. jusqu'à faire un serveur de fichiers...
L'anatomie d'une configuration procmail est organisée en 2 fichiers indispensables : ~/.forward et ~/.procmailrc
- Le fichier ~/.forward contient une ligne de commande utilisée par sendmail afin de lancer procmail avec le mail reçu en paramètre.
- Le fichier ~/.procmailrc contient les "recettes" qui permettent de traiter les mails en fonction de leur contenu.
2. LE FICHIER ~/.forward :
Il ne doit contenir qu'une seule ligne (concernant l'utilisation de procmail -- car il peut faire d'autres choses comme la redirection) :
"| IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #login"En gardant les guillemets, remplaçant le chemin vers procmail par le bon et en remplaçant #login par #votre-login.
3. LE FICHIER ~/.procmailrc :
Ce fichier contient plusieurs éléments. Tout d'abord il contient des définitions de variables dont certaines sont indispensables et d'autre que vous pouvez définir par vous-même. Ensuite il y a les recettes qui permettent, en appliquant des recherches d'expressions rationnelles (regexp en anglais), de déterminer si le traitement qui concerne cette cette recette sera appliqué au message qui passe par procmail. Plusieurs recettes peuvent s'enchaîner et / ou se suivent.
3.1 Les variables en tête du fichier .procmailrc
Il est IMPORTANT et même INDISPENSABLE de renseigner correctement les variables suivantes car elles ne le sont pas par le shell :
SHELL=/bin/sh : shell utilisé -- cette valeur est IMPOSÉE sous risque que procmail ne marche pas correctement. MAILDIR : Répertoire de spool de mails. LOGNAME : Votre login local ORGMAIL : Répertoire de stockage des mails. DEFAULT : Répertoire où iront les mails par défaut. La suivante est aussi très utile pur déboguer le .procmailrc :
LOGFILE : Fichier contenant les sorties de débogage. Voici un exemple de ce qui peut être mis en tête du ~./procmailrc :
------8<---------------------------------------------------------------------- ###### # Mon procmailrc de base # SHELL=/bin/sh MAILDIR=/var/mail # Répertoire où se trouvent le spool de mails LOGNAME=login # Votre login local ORGMAIL=$MAILDIR/$LOGNAME DEFAULT=$ORGMAIL VERBOSE=yeah MOI=moi@fai.fr # Votre adresse email chez votre fai. ###### # UNIQUEMENT POUR LE DEBUG => génère beaucoup de texte. # #LOGFILE=$HOME/.procmail/logfile ------8<----------------------------------------------------------------------3.2. Bases des recettes procmail
Les recettes procmail sont composées de 3 parties :
- l'entête et ses options
- les règles de correspondance : expressions rationnelles sur les entêtes et corps des messages permettant de déterminer si le message va être traité par cette recette.
- l'action associée à cette recette.
3.2.1 Les entêtes
Toutes les recettes commencent par :0 [options][: [fichier]], les noms entre crochets étant optionnelles et à remplacer par les bonnes valeurs.
Les options les plus utilisées sont :
H : passe l'expression rationnelle sur les entêtes du message B : idem sur le corps h : utilise les entêtes pour le traitement b : idem sur le corps c : travaille sur une copie du message Le ":" et le fichier servent à générer un fichier verrou (automatique si aucun nom n'est donné).
3.2.2 Les règles (expressions rationnelles)
Les expressions rationnelles permettent de faire correspondre une partie du message à un motif. Leur description se trouve dans le manuel de sed et awk (Le livre de O'Reilly à ce sujet est très bien fait).
Ces expressions rationnelles (regexp en anglais) doivent toutes commencer par une étoile suivie d'une espace : "* " (sans les guillemets). Il peut y en avoir plusieurs pour une même recette. Les différentes règles sont traitées de cette façons comme s'il y avait un ET logique entre elles :
:O * expression1 * expression2 ... * expressionNPour faire un OU logique, il faut mettre sur une même ligne les expressions de la manière suivante :
:0 * expression1|expression2|...Notez bien qu'il ne faut pas d'espace. Les 2 formes sont bien entendu mélangeables.
3.2.3 Les actions
Une action est le traitement à effectuer si les expressions rationnelles pour cette recette ont été vérifiées. Dans ce cas il y a 2 actions principalement utilisées (et une troisième qui l'est moins) :
- la redirection vers un fichier : elle se fait en spécifiant tout simplement le nom du fichier dans lequel on veut mettre le message reçu.
- la redirection vers un programme : il faut alors commencer la ligne par "| " suivi du nom du programme qui va utiliser ce message en entrée.
Des exemples de ces 2 cas sont données plus bas.
Pour plus d'informations se reporter aux liens et aux docs fournies à la fin du document. La FAQ procmail est d'une très grande aide pour les problèmes courants ou déjà traités (et il y en a peu qui ne le sont pas).
4. QUELQUES EXEMPLES DE RECETTES PROCMAIL :
Dans cette section j'utiliserai des messages stockés sous forme de fichiers texte dans le répertoire créé pour l'occasion : ~/.procmail/
4.1 Mettre à la poubelle tous les messages que mon procmail a envoyé et auquel un système automatique a répondu
:0 *$ ^X-Loop:.*$MOI /dev/nullle $ après l'étoile dit qu'il faut interprêter le signe $ dans l'expression rationnelle comme étant une utilisation de variable. Ici $MOI a été rempli avec moi@fai.fr.
4.2 Mettre à la poubelle tous les messages qui contiennent un fichier .exe, .dot ou .vbs
:0 HBhb * ^Content-Type:.*\.(exe|dot|vbs).* | ( formail -rtk -p '| ' \ -A "X-Loop: $MOI" \ -A "Precedence: junk"; \ cat $HOME/.procmail/badfile ) | $SENDMAIL -t -oiL'action utilisée affiche un message rédigé en français et en anglais demandant gentilment à l'émetteur du message de ne plus envoyer ce genre de fichier.
Le message est entièrement utilisé avec cette recette et n'est donc ensuite plus disponible pour un traitement ultérieur.4.3 Répondre à ceux qui envoient des messages contenant des .doc, des .ppt, des .pps et des .xls
:0 HBhbc * ^Content-Type:.*\.(doc|ppt|pps|xls).* | (formail -rtk -p '| ' \ -A "X-Loop: $MOI" \ -A "Precedence: junk"; \ cat $HOME/.procmail/badattach ) | $SENDMAIL -t -oiNous travaillons ici sur une copie du message et donc celui-ci va parcourrir les recettes qui suivent dans le fichier .procmailrc au cas où un autre traitement serait à y appliquer. Si aucun autre traitement n'est effectué il sera tout simplement ajouté dans la boite à lettre locale.
4.4 Répondre enfin à ceux qui envoient des messages en HTML, en quoted-printable ou contenant une vcard alakon
:0 HBhbc * ^Content-Transfer-Encoding: quoted-printable|^Content-Type: text/html|^Content-Type: text/x-vcard | (formail -rtk -p '| ' \ -A "X-Loop: $MOI" \ -A "Precedence: junk"; \ cat $HOME/.procmail/badformat ) | $SENDMAIL -t -oiRien de neuf pour cette règle :)
4.5 Extensions
Il serait interessant de faire une recette permettant de vérifier le contenu des fichiers de type archive (.zip, .tar, .tar.gz, .tar.Z, .tar.bz2, .tgz), ce qui doit être faisable avec AmaVis (qui est un détecteur de virus pour systèmes de mail) et metamail.
5. QUELQUES EXPLICATIONS :
Un élément important a garder en mémoire lorsqu'on fait des recettes procmail est le fait de savoir sur quoi on applique la recette en fonction de ce qu'on veut obtenir par la suite.
En effet, si on ne travaille pas sur une copie du message (ce qui arrive dans la recette 2), l'intégralité du message est traité par cette recette, ce qui fait que s'il n'est pas copié dans la boite locale ou dans un fichier, il sera définitivement perdu. C'est pourquoi, malgré les inconvénients des messages contenant des données non agréables à lire (.doc, etc...), certaines recettes travaillent sur des copies permettant ainsi de garder le message -- qui pourra d'ailleurs subir des traitements ultérieurs s'il lui arrivait de satisfaire aux expressions rationnelles des recettes suivantes.6. LIENS :
- Tout d'abord l'excellente doc d'Olivier Tharan :
http://www.linux-france.org/article/appli/procmail.html
- Ensuite un article de la Linux Gazette :
http://www.linux-france.org/article/lgazette/issue-26/issue-26-4.html
- Le site officiel de Procmail :
http://www.procmail.org/
- La FAQ officielle :
http://www.iki.fi/era/procmail/mini-faq.html
ou un mirroir comme :
http://www.xs4all.nl/~sister/mirror/procmail/
- L'indispensable site des trucs et astuces :
http://www.uwasa.fi/~ts/info/proctips.html
- Enfin un complément pour l'anti-spam :
http://www.uwasa.fi/~ts/info/spamfoil.html
7. FICHIERS :
Ici vous trouverez des exemples que j'utilise et qui illustrent les recettes ci-dessus :
Thomas Nemeth :
|
|
Page modifiée le 17 mars 2001
|