<!DOCTYPE Article PUBLIC "-//Davenport//DTD DocBook V3.0//EN" [
]>
<!-- -*- sgml -*- -->
<!-- Commentaires sur le fichier $RCSfile: procmail.sgml,v $ :

- ceci est un commentaire SGML, attention à bien respecter la syntaxe des
  commentaires SGML (ne pas mettre deux fois un tiret quoi...)

- le fichier est géré avec RCS, ça permet de prendre en compte les numéros de
  version !

- pour toute modification effectuée sur ce fichier, merci de contacter
  son auteur, Olivier Tharan <olive@oban.frmug.org> ; envoyer de
  préférence un patch au format 'diff -u' bzippé ! Toutefois, les
  contributions en texte simple seront aussi gracieusement acceptées.

- premier exercice : rechercher les FIXME dans le document :-)
- deuxième exercice : pas mal de parties sont loin d'être complètes, il faut
  donc les compléter.

- besoin d'infos sur Docbook : comment mettre une note de bas de page dans la
  même page que l'appel de note et pas en fin de page ? Comment définir
  facilement des entités ?

- une balise de fin de section est suivie d'un commentaire identifiant le
  titre de la section, afin de s'y retrouver

- passer en DTD Docbook 4.1 ? -> il suffit peut-être de modifier l'en-tête.

- TODO : parler de mailstat, filtrer les spams (ok pour mailstat, pas mal pour
  les spams)
- TODO : intégration sendmail/procmail/fetchmail/mutt (MTA/MDA/MUA/MOUAHAHAH)
  (en cours)
- TODO : interaction avec un anti-virus : faire le lien sur mon autre doc à
  màj
- TODO : mettre une licence à ce fichier (FDL ?)
- TODO : parler de dotfile
-->

<article>
  <artheader>
    <title>Procmail</title>
    <subtitle>Utilisation de procmail</subtitle>
    <author>
      <firstname>Olivier</firstname>
      <surname>Tharan</surname>
      <affiliation>
	<address><email>&lt;olive@oban.frmug.org&gt;</email></address>
      </affiliation>
    </author>
    
    <copyright>
      <year>1999, 2000</year>
      <holder role="mailto:olive@oban.frmug.org">Olivier Tharan</holder>
    </copyright>
    
    <pubdate role="rcs">$Date: 2000/12/17 19:08:37 $</pubdate>
    
    <releaseinfo>@(#) $Id: procmail.sgml,v 1.14 2000/12/17 19:08:37 olive Exp olive $</releaseinfo>
    
    <abstract>
      <para>
Ce document décrit l'utilisation de procmail dans la vie de tous les jours.
<!-- Genre, au café, au bureau, dans le bus... -->
</para>
    </abstract>
  </artheader>

  <!-- FIXME: penser à mettre une toc ; d'après Docbook, c'est le backend qui
  s'en charge ; voir dbparam.dsl quelque part, ou option de jade -->
  
  <sect1>
    <title>Introduction</title>
    
    <!-- FIXME : inclure une intro sur le document.
	est-ce redondant avec les sous-sections et/ou avec l'abstract ?
    -->

    <para>
Ce document essaie d'expliquer comment installer et utiliser Procmail
pour filtrer le courrier électronique. Procmail est un outil très
puissant pour traiter, de quelque manière que ce soit, des courriers
électroniques. Ce document essaie de donner des exemples simples à
mettre en oeuvre, tout en n'oubliant d'expliquer le pourquoi de ces
exemples.
</para>

    <para>
Les recettes sont tirées de mon expérience personnelle, et
représentent mes commentaires sur les documentations largement
disponibles.
</para>
    
    <para>
NOTE : ce document est en cours d'élaboration et est évidemment très
incomplet (mais il évolue peu à peu !). Les sources contiennent des
commentaires guidant un peu l'évolution du document, les lire pour savoir où
ajouter des éléments, chercher le mot 'FIXME' ! Comme il a été relu par peu
d'autres personnes, il se peut que certaines informations soient erronées.
</para>

    <para>
Ce document se trouve sur <ulink
url="http://www.linux-france.org/article/appli/procmail.html">son site de
référence</ulink>.
</para>
    <sect2>
      <title>Qu'est-ce que procmail ?</title>
      
      <para>
Procmail est un outil permettant principalement de filtrer des
messages électroniques (il ne faut pas oublier formail, livré avec
procmail, qui est un adjoint appréciable à ce dernier). Il est très
puissant et ses capacités de filtrage lui permettent de délivrer des
courriers dans différentes boîtes aux lettres, de les renvoyer, voire
d'effectuer n'importe quelle action en fonction du filtre désigné.
</para>
      
      <para>
Procmail fonctionne grâce à un système de règles, qu'il parcourt les
unes après les autres, afin de déterminer si le message qu'il traite
satisfait à une règle en particulier, et exécute l'action associée à
la règle trouvée, le cas échéant.
</para>
      
      <para>
Vous avez peut-être entendu parler de procmail. Vous avez peut-être vu des
règles procmail, et vous êtes enfui en courant après ça (ça se peut !).
Vous connaissez la puissance de procmail, mais vous ne savez pas trop par
où commencer. Ce document est pour vous. Il expliquera comment installer
procmail, et comment l'utiliser de manière simple au début. Finalement, une
série de pointeurs vous permettra d'aller plus loin, une fois les bases
assimilées.
</para>
      
      <para>
Pré-requis pour utiliser procmail :
</para>
      
      <itemizedlist>
	<listitem>
	  <para>
savoir utiliser le courrier électronique (je ne vais pas l'apprendre à votre
place, mais si vous êtes là, c'est que vous savez, n'est-ce pas ? ;-)</para>
	</listitem>
	
	<listitem>
	  <para>
avoir des connaissances de base en expressions rationnelles (les fameuses
regexp !), qui sont abondamment utilisées dans les règles de procmail.
Rassurez-vous, j'essaierai de mettre suffisamment d'exemples pour que cela
reste compréhensible. Sinon, procmail utilise les expressions rationnelles
standards d'<command>egrep</command>, donc vous pouvez lire les pages de
manuel <filename>egrep(1)</filename> et <filename>regex(7)</filename> pour
plus d'informations.
</para>
	</listitem>
      </itemizedlist>
      
    </sect2> <!-- qu'est-ce que -->
    
  </sect1> <!-- Introduction -->
  
  <sect1>
    <title>Installation de procmail</title>
    
    <sect2>
      <title>Compilation</title>
      
      <para>
L'installation de procmail n'est pas très compliquée. Si vous n'êtes
pas l'administrateur de votre système, il faudra contacter ce dernier
pour savoir si procmail est installé ou pas sur le serveur de
courrier. Si vous pouvez (ou devez !) l'installer vous-même, ce n'est
pas difficile. En général, procmail est distribué sous forme d'un
paquet pour les distributions Linux
(<filename>procmail-3.14-2.i386.rpm</filename> pour la Redhat-6.2,
<filename>procmail_3.13.1-3.deb</filename> pour la Debian 2.2, etc.)
ou d'un port pour FreeBSD. Si vous ne trouvez pas de distribution
binaire pour votre système, il est possible de le compiler à partir
des sources, que l'on peut trouver sur <ulink
url="ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/procmail.tar.gz">le
site de procmail</ulink> ou plus rapidement au <ulink
url="ftp://ftp.lip6.fr/pub/unix/mail/procmail/procmail.tar.gz">Lip6
(Jussieu)</ulink>.  La dernière version à ce jour est 3.15.
</para>

    </sect2> <!-- compil -->

    <sect2>
      <title>Configuration</title>

      <!-- FIXME: parler du .forward ou de la config globale -->
      <!-- FIXME: parler de .procmailrc -->
      <!-- FIXME: parler des droits des fichiers -->
      
      <para>
Il existe plusieurs manières d'appeler procmail, selon que
l'administrateur système est coopératif ou non ! Il est en effet
possible d'utiliser procmail de manière globale (procmail peut servir
de filtre général, avant même la livraison du courrier à chaque
utilisateur -- pour passer un anti-virus à l'entrée du système, par
exemple), ou bien de manière individuelle (utilisation de procmail
sans disposer de droits particuliers autres que ceux du répertoire
personnel).
</para>
      
    </sect2> <!-- config -->
    
    <sect2>
      <title>Installation personnelle</title>
      
      <para>
Il est possible d'installer procmail pour un usage personnel, si jamais le
système n'est pas paramétré pour utiliser procmail conjointement avec le
serveur de courrier. Pour cela, la documentation de procmail indique de
mettre la ligne suivante dans le fichier <filename>.forward</filename> de
votre répertoire personnel :
</para>
      
      <blockquote><screen><userinput>
"| IFS=' '&& exec /usr/bin/procmail -f-||exit 75 #MON_LOGIN"
</userinput></screen></blockquote>
      
      <para>
Notez le « tube » (<literal>|</literal>) en début de ligne
	<footnote><para>
	et toutes mes excuses pour l'avoir oublié au début...
	</para></footnote>
! Le fichier
<filename>.forward</filename> est cherché par le serveur de courrier à chaque
courrier qui nous est destiné ; si ce fichier existe, il permet de définir,
soit une adresse à laquelle redistribuer (= forwarder) le courrier, soit une
commande à travers laquelle on passe le courrier. Dans notre cas, on indique
au serveur de courrier de passer les courriers entrants nous étant destinés à
travers la commande procmail.
</para>

    </sect2> <!-- install perso -->
    
  </sect1> <!-- Installation -->
  
  <sect1>
    <title>Interaction avec le reste du système</title>

    <sect2>
      <title>Procmail comme livreur de courrier</title>
      
      <para>
Une manière très utile de mettre procmail à disposition de tous les
utilisateurs est de l'installer comme outil de livraison du courrier
en local. procmail est en effet aussi un MDA (Mail Delivery Agent,
outil de livraison de courrier), c'est-à-dire que le courrier local
traité par le serveur de courrier est envoyé à procmail pour que ce
dernier place le courrier dans les boîtes aux lettres des
destinataires locaux (en général, dans
<filename>/var/mail/login</filename>).
</para>
      
      <para>
De manière historique, c'est l'outil <filename>/bin/mail</filename>
qui faisait office de livreur de courrier local. Il a tendance à être
remplacé par procmail, car ce dernier permet aussi de filtrer le
courrier entrant.  L'un des inconvénients de procmail est qu'il est
plus lourd à lancer à chaque fois qu'un courrier doit être livré.
</para>

      <para>
Par contre, une fois installé de manière globale, procmail peut servir
de filtre pour les personnes qui le désirent, et comme simple livreur
de courrier pour les autres. Il suffit pour les premiers d'avoir un
fichier de configuration <filename>.procmailrc</filename> dans leur
répertoire personnel. Si ce fichier n'est pas présent, procmail
livrera le courrier dans la boîte aux lettres habituelle de la
personne.
</para>

      <para>
L'installation de procmail comme MDA local est relativement simple
pour les serveurs de courrier les plus courants. Étudions les cas les
plus courants.
</para>

    </sect2> <!-- livreur de courrier -->
    
    <sect2>
      <title>Procmail et Sendmail</title>

      <para>
Si vous paramétrez sendmail avec les macros m4, il suffit de placer la
ligne suivante dans <filename>sendmail.mc</filename> (ou
<filename>config.mc</filename> suivant l'Un*x utilisé
      <footnote><para>Ce fichier est généralement situé dans
      <filename>/etc/mail</filename> ou dans <filename>
      /etc/sendmail</filename>, voire, d'après Éric Jacoboni dans l'article
      <ulink
      url="http://www.linux-france.org/article/mail/sendmail/sendmail.html">
      Configuration simple (ou simplifiée) de sendmail pour PPP</ulink>,
      dans <filename>/usr/lib/sendmail-cf/cf</filename> si le système
      utilisé est une distribution RedHat de Linux.
      </para></footnote>
) :
</para>

      <blockquote><screen><userinput>
FEATURE(local_procmail)dnl
</userinput></screen></blockquote>

      <para>
et, si votre procmail n'est pas dans
<filename>/usr/local/bin</filename>
      <footnote><para><filename>
      /usr/local/bin/procmail</filename> est l'emplacement par défaut de
      <command>procmail</command> selon <command>sendmail.</command></para>
      </footnote> :
      </para>

      <blockquote><screen><userinput>
define(`PROCMAIL_MAILER_PATH', `/usr/bin/procmail')dnl
</userinput></screen></blockquote>

<!-- FIXME: à terminer - C'est mieux comme ça ?-->
<!-- pour finir, ajouter un petit topo sur Mlocal -->
    </sect2> <!-- sendmail -->
      
    <sect2>
      <title>Procmail et Postfix</title>
	
      <para>
Pour utiliser procmail avec Postfix, rien de plus simple : renseignez la
ligne mailbox_command du fichier
<filename>main.cf</filename>
      <footnote><para>Ce fichier se trouve en général dans
      <filename>/etc/postfix</filename>.
      </para></footnote>
, en indiquant le chemin complet
vers procmail. Par exemple :

      <blockquote><screen><userinput>
mailbox_command = /usr/bin/procmail
</userinput></screen></blockquote>
</para>

      <para>
<!-- FIXME: parler de ne pas mettre d'échappement de shell sur la ligne de
commande -->
</para>
	
    </sect2> <!-- postfix -->

    <sect2>
      <title>Exim</title>

      <para>
Pour utiliser procmail avec Exim, il faut remplacer le contenu habituel du
<filename>~/.forward</filename> par :
</para>

      <blockquote><screen><userinput>
|/usr/bin/procmail
</userinput></screen></blockquote>

      <para>
Cette solution devrait en fait fonctionner avec tout serveur de courrier
possédant une compatibilité proche de Sendmail. Si quelqu'un a une solution
générique ne nécessitant pas l'écriture d'un fichier
<filename>~/.forward</filename>, elle est la bienvenue !
</para>

    </sect2> <!-- Exim, merci à Didier Belot -->

    <!-- FIXME: inclure les configs pour QMail, etc. -->
    <sect2>
      <title>Autres serveurs de courrier</title>
	
      <para>
FIXME: qui a envie d'écrire là-dessus ? QMail, etc.
</para>
	
    </sect2> <!-- autres MTA -->
      
    <sect2>
      <title>Procmail et fetchmail</title>
	
      <para>
Ceux qui se connectent épisodiquement à Internet par une liaison PPP
utilisent peut-être fetchmail pour récupérer leur courrier depuis le
serveur POP ou IMAP de leur fournisseur d'accès. fetchmail est un très
bon client POP/IMAP, que je vous recommande.
</para>
	
      <para>
En temps normal, fetchmail récupère le courrier sur le serveur distant
et l'adresse au serveur de courrier local, sur le port 25
(SMTP). Cette méthode fonctionne si vous avez configuré un serveur de
courrier sur votre machine (Sendmail ou Postfix), mais est
relativement lourde car une fois passé à Sendmail, le courrier finira
par passer dans les mains de procmail. On peut éviter un saut
supplémentaire en faisant passer le courrier directement de fetchmail
à procmail. Pour cela, il suffit d'ajouter l'option de configuration
suivante dans le fichier <filename>.fetchmailrc</filename> :
</para>

      <blockquote><screen><userinput>
mda "/usr/bin/procmail -Y -d %T"
</userinput></screen></blockquote>

      <!-- FIXME: vérifier que c'est la bonne syntaxe et que
      procmail -f- ne fait pas mieux ; voire formail -s procmail -->

      <para>
Le paramètre <literal>-mda</literal> passé en ligne de commande fait la même
chose.
</para>
    </sect2> <!-- fetchmail -->

    <sect2>
      <title>Configurer Gnus pour qu'il utilise procmail</title>

      <para>
Éric Jacoboni a contribué cette section sur l'utilisation de Gnus
conjointement à Procmail. Gnus est suffisamment important et puissant pour
qu'on doive le configurer de manière à l'utiliser proprement avec procmail.
</para>

      <para>
Gnus permet de créer de façon simple des dossiers de courrier selon les
critères de votre choix : il suffit d'utiliser la fontion
<function>nnmail-split-methods</function> et de spécifier, pour chaque
dossier, l'expression rationnelle sur laquelle on se basera pour classer un
courrier dans celui-ci.
</para>

      <para>
Voici, par exemple, ce que pourrait contenir un <filename>.gnus</filename>
pour activer cette possibilité :
</para>

<blockquote><screen><userinput>
;; On utilise le backend nnml pour le courrier (car par défaut,
;; Gnus lit les news...)
(setq 
  gnus-secondary-select-methods '((nnml ""))
  mail-sources
           '((directory
	     :path "~/incoming/"   ;; cf. variable MAILDIR de .procmailrc
	     :suffix "" )
	    )
)
</userinput></screen></blockquote>

      <para>
Ici, nous avons choisi d'utiliser le répertoire <filename>incoming</filename>
comme source de courrier, c'est celui où procmail range ses dossiers.
Gnus tranfèrera alors les courriers dans les répertoires correspondants de
<filename>Mail</filename> (c'est le répertoire par défaut).
</para>

      <!--
      <para>
Vous noterez que la dernière entrée (Autres-messages) s'arrange pour capturer
tous les messages ne correspondant à aucune des règles précédentes.
</para>

      <para>
Cette méthode fonctionne très bien et nous l'avons longtemps pratiquée avec
satisfaction.
</para>
-->

      <para>
Toutefois, cette méthode a quelques inconvénients : le principal est qu'elle
fait double emploi si l'on utilise déjà procmail pour, par exemple, mettre aux
oubliettes des courriers de provenance douteuse, ou pour supprimer les
doublons (voir précédemment). Un autre inconvénient est qu'elle est propre à
Gnus, ce qui rend obsolètes tous ces dossiers si l'on décide de changer de MUA
(mais quelle idée saugrenue...).
</para>

      <para>
Pour cette raison, il est plus sage de configurer Gnus pour qu'il
utilise procmail pour gérer ces dossiers :
</para>

<blockquote><screen><userinput>
;; Utilisation du backend nnml avec procmail
;; nnmail-procmail-directory correspond à la variable MAILDIR 
;; de votre .procmailrc
(setq
  gnus-secondary-select-methods '((nnml ""))
  gnus-use-procmail t
  nnmail-spool-file "procmail"
  nnmail-procmail-directory "~/incoming/"
  nnmail-procmail-suffix ""
)

;; Pour les nouvelles versions de Gnus (>= 5.8.7)
(setq mail-sources
   (list '(directory
             :path "~/incoming/"
             :suffix "" 
          )
   )
)
</userinput></screen></blockquote>

      <para>
et c'est tout... Gnus utilisera les règles définies dans votre
<filename>.procmailrc</filename> pour créer ses dossiers de courrier.
</para>

      <para>
Le principe est simple : lorsque vous lancerez Gnus, celui-ci ira consulter
<filename>~/incoming</filename> où doivent se trouver les différents fichiers
créés par procmail. Si ces fichiers ne sont pas vides, il les lit et transfère
les courriers qu'ils contiennent dans les sous-répertoires de
<filename>~/Mail</filename> en créant un fichier par courrier. Après cette
étape, les fichiers de <filename>~/incoming</filename> sont donc tous vides.
</para>

      <para>
Si vous avez, par exemple, les règles suivantes dans votre
<filename>.procmailrc</filename> :
</para>

<blockquote><screen><userinput>
# *FreeBSD-Stable
:0
* ^TO.*stable@FreeBSD
FreeBSD-Stable

# *Systeme
:0
* From:.*(root|news)@chezmoi
Systeme

# *Perso
:0
* ^TO.*moi
Perso

# *Le-reste
:0
* ^TO.*
Le-Reste
</userinput></screen></blockquote>

      <para>
Vous aurez les fichiers <filename>~/incoming/FreeBSD-Stable</filename>,
<filename>~/incoming/Systeme</filename>, <filename>~/incoming/Perso</filename>
et <filename>~/incoming/Le-Reste</filename> qui se rempliront au fur et à
mesure que vous recevez des messages correspondant aux règles ci-dessus. En
lançant Gnus, celui-ci créera (si ce n'est déjà fait) les répertoires
<filename>~/Mail/FreeBSD-Stable</filename>,
<filename>~/Mail/Systeme</filename>, <filename>~/Mail/Perso</filename> et
<filename>~/Mail/Le-Reste</filename> et chacun d'eux contiendra des fichiers
portant des noms sur le même principe qu'un spool de news :
</para>

      <blockquote><screen><userinput>
% ls -l ~/incoming/Perso
-rw-------  1 moi  moi  0 26 jul 14:05 /home/moi/incoming/Perso
                       ^^^

% ls ~/Mail/Perso
1       11      13      2       4       6       8
10      12      14      3       5       7       9
</userinput></screen></blockquote>

      <para>
L'avantage de cette méthode est de centraliser le triage du courrier en un
seul endroit : <filename>.procmailrc</filename>. D'autre part, procmail
dispose de moyens bien plus perfectionnés pour spécifier les expressions
rationnelles (la macro ^TO_, notamment).
</para>

      <para>
Par contre, Gnus considèrera que chaque fichier de
<filename>~/incoming</filename> contient une liste de courriers : si vous avez
donc créé un fichier <filename>msgid.cache</filename> dans ce répertoire avec
la règle
</para>

      <blockquote><screen><userinput>
:0 Wh: msgid.lock
| formail -D 8192 msgid.cache
</userinput></screen></blockquote>

      <para>
vue plus haut, Gnus se plaindra que ce dossier n'est pas au bon format. Pour
régler ce problème, il suffit de modifier cette entrée en :
</para>

      <blockquote><screen><userinput>
:0 Wh: msgid.lock
| formail -D 8192 /tmp/msgid.cache
</userinput></screen></blockquote>

      <para>
ce qui a l'avantage supplémentaire de nettoyer ce fichier à chaque redémarrage
de votre système (s'il est configuré pour nettoyer <filename>/tmp</filename>).
</para>

      <para>
Ressources :
</para>

      <para>
Comme d'habitude, le fichier info de Gnus donne tous les renseignements
(Rubrique 'Select Methods' -&gt; 'Getting Mail' -&gt; 'Mail and Procmail').
</para>

      <para>
La <ulink url="http://www.ccs.neu.edu/software/contrib/gnus/">Faq Gnus</ulink>
contient également une rubrique sur cette configuration (contribution de
Randal Schwartz).
</para>

      <para>
Gnus RuLeZ !
</para>

    </sect2> <!-- Gnus -->

    <sect2>
      <title>Utilisation de Mutt avec Procmail</title>

      <para>
Mutt s'accomode très bien à la sauce procmail. Il lit les boîtes au format
<literal>mbox</literal>, format par défaut sous Unix, qui est le format
standard écrit par procmail. Il suffit donc d'indiquer à mutt le répertoire
qu'utilise procmail pour stocker les boîtes aux lettres. Si vous utilisez la
configuration indiquée ci-dessous, le répertoire est
<filename>$HOME/Mail</filename>, qui est le répertoire par défaut utilisé par
mutt. La boîte aux lettres normale, celle où procmail stockera le courrier qui
n'a pas été trié et que mutt lira au démarrage sans autre indication de votre
part, est <filename>/var/mail/$LOGIN</filename> (ou
<filename>/var/spool/mail/$LOGIN</filename>).
</para>

      <para>
Si vous changez le répertoire où procmail stockera le courrier, il faut aussi
l'indiquer à mutt, en utilisant la variable <literal>folder</literal>. Par
exemple : <literal>set folder=~/courrier</literal> dans votre
<filename>.muttrc</filename>. Voir la variable <literal>MAILDIR</literal> de
procmail.
</para>

      <para>
Si vous modifiez la boîte aux lettres système (celle où devraient être
stockés vos courriers en définitive) avec la variable
<literal>DEFAULT</literal> de procmail, il faudra aussi l'indiquer à mutt.
Pour cela, vous pouvez soit utiliser la variable <literal>spoolfile</literal>
dans la configuration de mutt : <literal>set spoolfile=~/Mail/inbox</literal>,
soit positionner la variable d'environnement <literal>MAIL</literal>.
</para>

      <para>
Tous ces renseignements se trouvent dans le manuel de mutt (installé en
général dans <filename>/usr/share/doc/mutt/manual.txt</filename>).
</para>

    </sect2> <!-- Mutt -->

  </sect1> <!-- interaction -->
      
  <sect1>
    <title>Configuration de procmail</title>
    
    <para>
L'utilisation de procmail revient à peu près à se créer un fichier de
configuration ; c'est peut-être la partie la plus difficile du parcours, mais
avec des exemples bien choisis, c'est plus clair.
</para>
    
    <sect2>
      <title>Écriture du fichier .procmailrc</title>
      
      <para>
Le fichier <filename>.procmailrc</filename> est une combinaison
d'assignations de variables et de <emphasis>recettes</emphasis>. Les
recettes procmail sont composées de trois parties :</para>

      <itemizedlist>
	<listitem>
	  <para>l'en-tête et ses
	options ;</para>
	</listitem>

	<listitem>
	  <para>les règles de correspondance : expressions
	  rationnelles sur les en-têtes et corps des messages
	  permettant de déterminer si le message va être traité par
	  cette recette ;</para>
	</listitem>

	<listitem>
	  <para>l'action associée à cette recette.</para>
	</listitem>
      </itemizedlist>

      <para>La première correspondance trouvée l'emporte, et termine
la lecture de <filename>.procmailrc</filename> ; si aucune
correspondance n'est trouvée, le courrier est livré dans la boîte aux
lettres par défaut (<filename>/var/mail/toto</filename> par exemple).
</para>
      
      <sect3>
        <title>Variables</title>

	<para>
Il est possible de définir des variables dans le fichier de configuration
<filename>.procmailrc</filename>. Certaines d'entre elles auront une
signification particulière pour procmail, alors que les autres peuvent être
utilisées dans les règles qui suivront comme des variables normales. Voici un
exemple commenté :
</para>

        <blockquote><screen><userinput>
# Variables spéciales pour procmail

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

# pas obligatoire : procmail détermine votre nom de login tout seul, mais pour
# l'exemple on supposera que l'utilisateur s'appelle 'toto'
LOGNAME=toto

# mettre /bin/sh surtout si vous utilisez tcsh !
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:/home/toto/bin

# répertoire où seront stockés les mails ; s'assurer que votre MUA sait y
# accéder aussi
MAILDIR=/home/toto/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=$MAILDIR/emergency-inbox

# boîte de réception par défaut
DEFAULT=/var/mail/toto

# 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
</userinput></screen></blockquote>

	<para>
Les autres variables utilisées ou définies par procmail sont décrites dans la
page de manuel de <filename>procmailrc(5)</filename>.
</para>
      </sect3> <!-- variables -->

      <sect3>
        <title>Séparer le fichier en plusieurs parties</title>

	<para>
Il est possible de scinder le fichier .procmailrc en plusieurs parties, afin
d'en améliorer la lisibilité. En fait, on peut inclure un fichier grâce à la
directive suivante :
</para>

<blockquote><screen><userinput>
INCLUDERC=nom_de_fichier
</userinput></screen></blockquote>

	<para>
où <literal>nom_de_fichier</literal> est le fichier à inclure à l'endroit de
la directive, c'est soit un chemin complet, soit un chemin relatif au
répertoire courant. On peut inclure des fichiers de façon imbriquée sans aucun
problème.
</para>
      </sect3> <!-- plusieurs parties -->

      <sect3>
	<title>Recettes</title>
	
	<para>
Une recette a le format suivant :
</para>
	
	<!-- FIXME: inclure le format selon procmailrc(1) en le traduisant -->
	<blockquote><screen><userinput>
:0 [drapeaux] [ : [verrou_local] ]
&lt;zéro ou plusieurs conditions (une par ligne)&gt;
&lt;exactement une ligne d'action&gt;
</userinput></screen></blockquote>
	
	<para>Une recette commence par <literal>:0</literal> ; sur la
même ligne, on ajoutera des drapeaux supplémentaires selon les
cas. Les drapeaux sont décrits dans la page de manuel de
<filename>procmailrc(1)</filename>. Les plus utilisés sont :</para>

	<itemizedlist>
	  <listitem>
	    <para>H : passe l'expression rationnelle sur les en-têtes
	du message ;</para>
	  </listitem>
	  <listitem>
	    <para>B : idem sur le corps ;</para>
	  </listitem>
	  <listitem>
	    <para>h : n'envoie que les en-têtes pour traitement ;</para>
	  </listitem>
	  <listitem>
	    <para>c : garde une copie du message pour traitement
	    ultérieur</para>
	  </listitem>
	</itemizedlist>

	<para>Finalement, en fin de ligne, on ajoutera
<literal>:</literal> si on désire un fichier de verrou (afin de ne pas
corrompre un fichier en y écrivant simultanément deux
courriers).</para>

	<para>
Les lignes suivantes indiquent zéro ou plusieurs conditions, chacune
sur une ligne différente, permettant de tester si un courrier
correspond à ce que l'on cherche. Les conditions commencent par le
caractère <literal>*</literal> et tout ce qui suit est envoyé à la
commande <command>egrep</command> interne à procmail. Il faut que
toutes les conditions soient vraies pour considérer la recette comme
vraie et activer l'action qui suit (conditions de type AND).
</para>

	<para>Finalement, l'action à effectuer si les conditions ont
      été vérifiées sont :</para>
	<itemizedlist>
	  <listitem>
	    <para>la redirection vers un fichier : action la plus
      courante, elle permet de délivrer le courrier dans la boîte aux
      lettres indiquée. Il faudra faire attention à spécifier un
      verrou au début de la recette. Il suffit d'indiquer sur la ligne
      le nom du fichier ou du répertoire dans lequel stocker le
      courrier ;</para>
	  </listitem>

	  <listitem>
	    <para>la redirection vers un programme : cette action
      permet d'envoyer le courrier sur l'entrée standard d'un
      programme qui s'occupera du courrier. Le verrou n'est plus
      nécessaire, et on indiquera la redirection en commençant la
      ligne par une barre verticale (<literal>|</literal>) puis la
      commande à exécuter ;</para>
	  </listitem>

	  <listitem>
	    <para>l'envoi vers une autre adresse électronique : le
	    verrou est inutile, et la ligne d'action commencera par un
	    point d'exclamation, suivi de l'adresse de renvoi.</para>
	  </listitem>
	</itemizedlist>

      </sect3> <!-- recettes -->
      
      <!-- FIXME: parler des verrous, donner des recettes simples et
      plus compliquées -->
      
    </sect2> <!-- .procmailrc -->
    
    <sect2>
      <title>Quelques recettes utiles</title>
      <!-- Oui, on entre enfin dans le vif du sujet diront certains :-) -->

      <para>
Voici une liste désordonnée de recettes de base qui pourront être
utiles, et qui sont différentes des règles qu'on trouve dans les pages
de manuel de procmail.
</para>

      <!-- FIXME: met-on une régle avant ou après son explication ?
      Les babasseurs dorment-ils avec la barbe en dessous ou au-dessus
      des draps ? -->
      
      <orderedlist>

	<!-- Ne pas oublier de mettre un id pour chaque règle, ça peut être utile. -->

	<listitem id="enleve-doublons">
	  <para>
Ne garder qu'un seul exemplaire d'un mail, même si on le reçoit deux fois ;
utile, par exemple, quand on reçoit une réponse d'une liste de diffusion, à
la fois directement et par l'intermédiaire de la liste. Il est possible de
régler la taille du cache en changeant le nombre (8192).
</para>

	  <blockquote><screen><userinput>
:0 Wh: msgid.lock
| formail -D 8192 msgid.cache
	  </userinput></screen></blockquote>
	</listitem>

	<listitem id="tri-listes-diff">
	  <para>
Ces règles permettent de trier une liste de diffusion dans un dossier
séparé, afin de ne pas trop encombrer la boîte aux lettres normale.
</para>

	  <para>
Imaginons que je sois abonné à la liste Postfix-Fr. L'adresse pour envoyer un
message à cette liste est <email>postfix-fr@lists.freenix.org</email>,
mais quand vous en recevez, l'adresse de l'expéditeur est
<email>postfix-fr-owner@lists.freenix.org</email>. Il nous faut donc
trouver une expression suffisamment complète qui nous permette de repérer un
tel message sans ambiguïté. Une telle expression peut être exprimée par la
règle suivante :
</para>

	  <blockquote><screen><userinput>
:0:
* ^From.*postfix-fr-owner
postfix-fr
	  </userinput></screen></blockquote>

	  <para>
Dans cette règle, nous recherchons si l'en-tête représentant l'expéditeur (la
partie <literal>^From</literal> de l'expression régulière) contient la chaîne
<literal>postfix-fr-owner</literal>, et si c'est le cas, plaçons le courrier
dans la boîte aux lettres nommée « <literal>postfix-fr</literal> ».
</para>

	  <para>
Pour trier d'autres listes de diffusion, le principe est le même : trouvez
dans les entêtes des courriers des éléments suffisamment significatifs sur
lesquels vous baserez votre tri (<literal>From.*liste-owner</literal> pour une
liste Sympa, <literal>From.*owner-liste</literal> pour une liste Majordomo,
<literal>From.*liste-admin</literal> pour une liste Mailman, etc.).
</para> <!-- FIXME à étoffer un peu -->
	</listitem>

	<listitem id="tri-sur-sujet">
	  <para>
La règle qui suit permet de trier un courrier sur son sujet, ce qui permet de
filtrer certaines listes de diffusion ajoutant systématiquement leur nom dans
le sujet du courrier. Vous pouvez aussi discuter d'un thème précis avec des
amis, des collègues en convenant d'un mot-clé dans le sujet.
</para>
	  <blockquote><screen><userinput>
:0:
* ^Subject:.*\[blague\]
copains/blagues
	  </userinput></screen></blockquote>

	  <para>
Tous les courriers dont le sujet contient la chaîne
<literal>[blague]</literal> (avec les crochets) iront dans le dossier
<filename>blagues</filename> se trouvant dans le sous-répertoire
<filename>copains</filename> de votre répertoire de courrier. Les crochets
sont échappés par une barre oblique inverse (<literal>\</literal>) car il
s'agit d'une expression rationnelle dans laquelle les crochets ont une
signification particulière.
</para>
	</listitem>

	<listitem id="multi-lidies">
	  <para>
La règle suivante, assez impressionnante, permet de trier en un seul coup tous
les courriers arrivant de listes de diffusion similaires. L'exemple typique en
est les listes de diffusion du <ulink url="http://www.debian.org/">projet
Debian</ulink>, auxquelles la règle fait référence (mais cela pourrait
fonctionner aussi pour les listes FreeBSD ;-) :
</para>

	  <blockquote><screen><userinput>
:0 H
* ^X-Mailing-List:.*[<].*lists\.debian\.org[>]
* ^X-Mailing-List:.*[<] *\/[^ ][^@]*
$MATCH
</userinput></screen></blockquote>

	  <para>
Cette règle à l'apparence barbare s'appuie sur le fait que les courriers des
listes Debian contiennent l'entête <literal>X-Mailing-List:
debian-nom-liste@debian.org</literal>, et que la variable
<literal>$MATCH</literal> contient ce qui a été trouvé dans l'expression
rationnelle précédente à partir de <literal>\/</literal>. Pour clarifier,
l'expression <literal>\/[^ ][^@]*</literal> « correspondra » à un début
d'adresse électronique (sans la partie domaine) et sera affecté à la variable
<literal>$MATCH</literal>. Pour la liste
<literal>debian-french@lists.debian.org</literal> par exemple, le courrier
donc sera placé dans le dossier <filename>debian-french</filename>.
</para>

	  <para>
Cette méthode fonctionne pour toutes les listes Debian, si vous êtes comme moi
abonné à plusieurs d'entre elles.
</para>
	</listitem>

	<listitem id="multiuser">
	  <para>Question : je récupère mon courrier depuis une seule
	    adresse, et j'aimerais le trier en fonction du
	    destinataire, selon que l'adresse soit <literal>Jean
	      Dupont &lt;toto@fai.fr&gt;</literal> ou <literal>Suzanne
	    Dupont &lt;toto@fai.fr&gt;</literal>.</para>

	  <para>Une solution peut être d'utiliser
	    <literal>fetchmail</literal> et son mode
	    <emphasis>multidrop</emphasis>, ou bien les règles
	    procmail suivantes :</para>

	  <blockquote>
	    <screen><userinput>
:0
* ^TO_Suzanne.*Dupont
! suzanne

:0
* ^TO_Jean.*Dupont
! jean
	      </userinput></screen>
	  </blockquote>

	  <para>Faites toutefois attention à ce qu'une boîte aux
	lettres récupère le courrier qui serait éventuellement passé à
	travers ; ce sera le cas quand l'adresse du destinataire
	n'aura pas la forme souhaitée. C'est en tout cas une façon
	rapide, mais peu efficace, de distribuer du courrier en
	provenance d'une seule adresse à destination de plusieurs
	personnes. Une solution plus pratique, par exemple, est
	d'utiliser UUCP.</para>

	</listitem> <!-- multi-utilisateurs, FIXME à terminer -->

	<listitem id="traitement-spam">
	  <para>
L'utilisation la plus attendue de procmail est le traitement des spams. Bien
qu'il soit possible de les bloquer plus en amont (listes noires avec les
serveurs de courriers, comme RSS, ORBS, MAPS, etc.), on déteste généralement
les voir arriver dans la boîte aux lettres. Je vous renvoie sur les sites
style <ulink url="http://www.cauce.org/">Cauce</ulink> pour les raisons
philosophiques de la lutte contre le spam et propose une solution simple pour
mettre de côté les courriers non désirés. Je n'indique pas comment les jeter
(<filename>/dev/null</filename>) car j'ai eu de mauvaises surprises : mieux
vaut avoir un ou deux spams dans la boîte qu'un courrier important à la trappe
!
</para>

	  <para>
La règle qui suit utilise la méthode de la « liste noire », que l'on gère en
insérant dans un fichier une adresse non désirée, voire une expression
rationnelle si l'on veut bloquer un domaine entier, par exemple. Elle utilise
deux programmes, <filename>extract-addrs</filename> et
<filename>match-email-addr</filename> tirés de la définition de cette règle
adaptée de liste noire. Pour l'historique, je me suis basé sur les règles de
Larz Wirzenius (fameux ancien modérateur de comp.os.linux.announce)
disponibles à <ulink
url="http://www.iki.fi/liw/mailfilter.html">http://www.iki.fi/liw/mailfilter.html</ulink>
; Richard Gooch (fameux « hacker » du noyau Linux, entre autres) a adouci ces
règles et met les sources des deux programmes cités à disposition à <ulink
url="ftp://ftp.atnf.csiro.au/pub/people/rgooch/">ftp://ftp.atnf.csiro.au/pub/people/rgooch/</ulink>
	  <footnote><para>
	  Le parcours des règles de ces deux personnes est très instructif et
	  témoignent d'une utilisation avancée de procmail.
	  </para></footnote>
.
</para>

	  <para>
Compilez ces deux programmes, mettez-les à un endroit accessible par procmail
(rappelez-vous de la variable <literal>PATH</literal> du
<filename>.procmailrc</filename>), et incluez la règle suivante :
</para>
	
          <blockquote><screen><userinput>
# À modifier selon les cas
BLACKLIST=$MAILDIR/.blacklist

:0 Whic
| extract-addrs | match-email-addr $BLACKLIST

# Si on a trouvé une adresse de spammeur (ci-dessus), alors...
:0 a
{
	:0:
	junk/spam
}
</userinput></screen></blockquote>

	  <para>
Mettez de préférence cette règle vers la fin de votre fichier de configuration
procmail, car elle passe le courrier à travers deux tubes et est un peu plus
gourmande que les autres vues auparavant. Les deux premières lignes envoient
le courrier sur <filename>extract-addrs</filename> qui extrait les adresses
électroniques du message et les envoie à <filename>match-email-addr</filename>
qui les comparera avec le contenu de la liste noire.
</para>

	  <para>
En cas de correspondance, le résultat de la commande sera positif et la règle
suivante sera exécutée, ce qui a basiquement pour effet de mettre le courrier
de côté. Lisez cette boîte de temps en temps, on ne sait jamais...
</para>

	  <para>
Le contenu du fichier de liste noire est le suivant. Je vous conseille
vivement de créer vous-même votre fichier de liste noire, au fur et à mesure
des nouveaux spams. Couplée à d'autres règles (pas de HTML, est-ce que le
courrier m'est bien adressé, etc.), cette méthode réduit énormément le nombre
de spams dans la boîte principale (mais pas le nombre absolu de courriers non
sollicités, hélas).
</para>

          <blockquote><screen><userinput>
# Les commentaires ainsi sont possibles -- en tout cas, ça marche chez moi
# (tm) -- voir le source de match-email-addr pour plus de détails

# quelques adresses « connues »
Friend@public.com
friend@everywhere.com
BeSeen@At.Our.Site.com

# quelques expressions rationnelles ; je suis un peu bourrin sur ce coup
# le mot-clé !regexp est important
!regexp [@.]msn\.com
!regexp [@.]aol\.com
!regexp [.@]writeme\.com
</userinput></screen></blockquote>

	  <para>
Note : ce passage sur le spam devrait faire l'objet d'une section complète
pour la prochaine révision du document.
</para>
	</listitem>

      </orderedlist>
    </sect2> <!-- recettes utiles -->

    <sect2>
      <title>Utilisation en dehors d'un serveur de courrier</title>

      <sect3>
        <title>Formail</title>
      <para>
Pour retraiter une boîte aux lettres non triée avec un filtre particulier, on
peut utiliser formail, qui appellera procmail à son tour. Exemple pratique :
</para>

      <blockquote><screen><userinput>
formail -s procmail fichier_filtre < boite_a_traiter
</userinput></screen></blockquote>

      <para>
où <filename>fichier_filtre</filename> est un fichier contenant les règles
procmail nécessaires au traitement du fichier et
<filename>boite_a_traiter</filename> est la boîte aux lettres contenant les
courriers à filtrer.
</para>

      <para>
On peut omettre <filename>fichier_filtre</filename>, auquel cas le fichier de
configuration par défaut (<filename>.procmailrc</filename>) sera utilisé.
</para>

      <para>
Formail permet bien d'autres choses utiles, notamment celle d'extraire des
champs particuliers des entêtes d'un courrier, ou d'ajouter des entêtes
particuliers. Ceci peut être utile dans le cas d'un répondeur automatique
(explication décortiquée dans la section sur l'utilisation avancée de procmail
ci-dessous).
</para>

      <para>
L'utilisation de formail est documentée dans la page de manuel
<filename>formail(1)</filename>.
</para>
      </sect3> <!-- formail, merci à Didier Belot -->

      <sect3>
        <title>Mailstat</title>
      <para>
Si vous générez des traces de l'utilisation de procmail (par l'utilisation de
la variable <literal>LOGFILE</literal>, par exemple), vous aurez envie d'en
avoir un condensé régulier ; les lire exhaustivement peut prendre du temps.
L'outil « mailstat », livré avec Procmail, peut servir à cela
      <footnote><para>
      Ne pas confondre avec « mailstats » (notez le 's'), utilisé avec
      Sendmail !
      </para></footnote>.
</para>

      <para>
La commande simple suivante permet de générer un résumé des traces de procmail
tout en gardant le fichier de trace intact :
</para>

      <blockquote><screen><userinput>
mailstat -klm procmail.log
</userinput></screen></blockquote>

      <para>
Le script suivant permet une utilisation plus avancée, à lancer régulièrement
(une fois par semaine, par exemple) :
</para>

      <blockquote><screen><userinput>
#! /bin/sh
# zerostat : archive les logs de procmail, envoie un résumé par email

# Variables à modifier en fonction de votre environnement

# mettre votre login
MOI=toto

# indiquer le fichier de trace
LOGFILE=~/Mail/.procmail.log

# utilisez gzip ou bzip2, au choix
ZIPEXE=bzip2 

PATH=/bin:/usr/bin:/usr/local/bin

mailstat -l $LOGFILE | \
	mail -s 'Statistiques procmail' $MOI
$ZIPEXE -f ${LOGFILE}.old
</userinput></screen></blockquote>

      <para>
L'utilisation de mailstat est documentée (succintement) dans la page de manuel
<filename>mailstat(1)</filename>. Ne pas oublier de passer le nom du fichier à
traiter en paramètre !
</para>

      </sect3> <!-- mailstat -->
    </sect2> <!-- utilisations hors MTA -->
  </sect1> <!-- Configuration -->
  
  <sect1>
    <title>Utilisation avancée</title>
    
    <para>
On peut utiliser procmail pour d'autres utilisations avancées,
notamment en tant que filtre global pour traiter tout le courrier
entrant. Les utilisations possibles sont de pouvoir filtrer les spams,
les virus, faire des actions définies, avant que le courrier ne soit
délivré à chaque utilisateur. Ceci peut être très pratique sur un
relais de courrier à l'entrée d'une organisation par exemple.
</para>

    <para>
Une autre utilisation possible est de mettre en place un répondeur
automatique. Cela peut servir à plusieurs choses.
</para>

      <itemizedlist>
        <listitem>
	  <para>
Mettre un répondeur quand on part en vacances et qu'on ne répondra pas tout de
suite, mais en signalant à l'expéditeur que le message est conservé (principe
du programme vacation).
          </para>

	  <para>
Problèmes posés : ne pas répondre deux fois à la même personne (utilisation
d'un hachage pour repérer les personnes auxquelles le filtre a déjà répondu),
ne pas répondre aux listes de diffusion (c'est très ennuyeux, on supposera que
les listes sont déjà triées quand le message arrive, on vérifiera quand même
qu'on ne tombe pas sur un gestionnaire de listes, etc.).
          </para>
        </listitem>

	<listitem>
	  <para>
Faire un mini-serveur de fichiers, déclenché par une balise spéciale dans le
sujet (exemple : <literal>Subject: GET liste-fichiers.gz</literal>)
	  </para>

	  <para>
Problèmes posés : se limiter à une liste de fichier déterminée, ne pas
accepter les caractères bizarres qui pourraient créer un trou de sécurité et
permettre de servir n'importe quel fichier du système.
	  </para>
	</listitem>
      </itemizedlist>

    <sect2>
      <title>Refuser des attachements (Word, HTML, etc.)</title>

      <para>
	Thomas Nemeth a donné la recette qu'il utilise pour filtrer
	des messages contenant des attachements indésirables : scripts
	Visual Basic (<literal>.vbs</literal>), des exécutables
	Windows (<literal>.exe</literal>), des documents Word
	(<literal>.doc</literal>) ou Excel
	(<literal>.xls</literal>). Cette recette a pour effet de
	renvoyer un message à l'expéditeur lui demandant de ne pas
	envoyer ce genre d'attachements.
      </para>

      <blockquote>
	<screen><userinput>
:0 HB
* ^Content-Type:.*\.(exe|vbs|doc|dot|xls)
*$ !X-Loop:.*$MOI
| (formail -rtk -p '| ' \
	    -A "X-Loop: $MOI" \
	    -A "Precedence: junk"; \
	    cat $HOME/.procmail/badfile ) | $SENDMAIL -t -oi
	  </userinput></screen>
      </blockquote>

      <para>
Cette recette utilise principalement formail pour générer un message
	d'auto-réponse. On recherche, à la fois dans les en-têtes et
	dans le corps (drapeaux 'H' et 'B'), un en-tête MIME décrivant
	le contenu (<literal>Content-Type</literal>) et indiquant un
	nom de fichier se terminant par les extensions définies dans
	l'expression <literal>(exe|vbs|doc|dot|xls)</literal>. Libre à
	vous d'en ajouter ou d'en retirer.
      </para>

      <para>
En cas de correspondance, on génère une réponse automatique, qui
	incluera le message complet : celui-ci est donc perdu pour un
	traitement ultérieur, copiez-le si vous voulez le garder quand
	même. Les options utilisées sont décrites dans la page de
	manuel de formail. On inclut le message d'origine, puis un
	message expliquant le refus et le tout est passé à Sendmail.
      </para>

      <para>
Vous avez sûrement remarqué la troisième ligne de cette
	recette. Expliquons-la plus en détail. Quand nous générons le
	message, nous ajoutons un en-tête <literal>X-Loop</literal>
	contenant notre adresse électronique (la variable
	<literal>$MOI</literal> est à renseigner au début du fichier
	de configuration), qui servira à procmail pour tester si le
	message est déjà passé entre ses mains. Ceci a un but : éviter
	les boucles de courrier, qui peuvent s'avérer très gênantes à
	découvrir et à réparer. On teste donc avec cette règle que le
	message n'a pas déjà subi un filtrage. Le signe
	<literal>$</literal> derrière l'étoile en début de ligne
	indique à procmail que se trouvent dans la ligne des variables
	qu'il faudra substituer (ici, <literal>$MOI</literal>).</para>

      <para>
Il est possible d'optimiser cette recette, pour coller plus
	spécifiquement au format MIME. En effet, l'en-tête
	<literal>Content-Type</literal> contient le type MIME de
	l'attachement, qui est plus donc plus fiable à chercher que
	l'extension du nom de fichier. On pourrait écrire la deuxième
	ligne ainsi, pour chercher les attachements binaires Windows,
	par exemple :</para>

      <blockquote>
	<screen><userinput>
* ^Content-Type:.*application/octet-stream.*name=.*\.exe
	  </userinput></screen>
      </blockquote>

      <para>L'expression rationnelle cherche les en-têtes représentant
      un attachement de type
      <literal>application/octet-stream</literal>, dont le nom se
      termine par <literal>.exe</literal>. On peut faire de même avec
      d'autres types d'attachement, le mieux est de tester. Le tableau
      suivant représente des attachements courants avec leur type MIME
      correspondant :</para>

      <table frame="topbot">
	<title>Attachements et types MIME</title>
<!--	<tgroup cols="3" colsep="yes"> -->
	<tgroup cols="3" colsep="0" rowsep="0">
	  <thead>
	    <row>
	      <entry>type MIME</entry>
	      <entry>extension</entry>
	      <entry>nom courant</entry>
	    </row>
	  </thead>
	  <tbody>
	    <row>
	      <entry>application/octet-stream</entry>
	      <entry>.exe</entry>
	      <entry>binaire Windows</entry>
	    </row>
	    <row>
	      <entry>application/msword</entry>
	      <entry>.doc</entry>
	      <entry>document Word</entry>
	    </row>
	    <row>
	      <entry>application/vnd.ms-excel</entry>
	      <entry>.xls</entry>
	      <entry>document Excel</entry>
	    </row>
	    <row>
	      <entry>application/vnd.ms-powerpoint</entry>
	      <entry>.pps, .ppt</entry>
	      <entry>document PowerPoint</entry>
	    </row>
	    <row>
	      <entry>application/x-zip-compressed</entry>
	      <entry>.zip</entry>
	      <entry>document compressé Zip</entry>
	    </row>
	    <row>
	      <entry>application/x-unknown-content-type-hlpfile</entry>
	      <entry>.hlp</entry>
	      <entry>document d'aide Windows</entry>
	    </row>
	    <row>
	      <entry>application/pdf</entry>
	      <entry>.pdf</entry>
	      <entry>document PDF</entry>
	    </row>
	    <row>
	      <entry>image/jpeg</entry>
	      <entry>.jpg, .jpeg</entry>
	      <entry>image JPEG</entry>
	    </row>
	    <row>
	      <entry>image/gif</entry>
	      <entry>.gif</entry>
	      <entry>image GIF</entry>
	    </row>
	    <row>
	      <entry>text/html</entry>
	      <entry>.htm, .html</entry>
	      <entry>document HTML</entry>
	    </row>
	    <row>
	      <entry>text/x-vcard</entry>
	      <entry></entry>
	      <entry>VCard Netscape</entry>
	    </row>
	  </tbody>
	</tgroup>
      </table>

  </sect1> <!-- Utilisation avancée -->
  
  <sect1>
    <title>Conclusion</title>
    
    <para>
</para>
    
    <sect2>
      <title>Quelques ressources en ligne</title>
      
      <para>Je vais tenter de résumer les principales ressources et
documentations disponibles sur procmail. Il n'existe pas à ma
connaissance de livre sur procmail : une recherche sur la chaîne
<literal>procmail</literal> sur le site <ulink
url="http://www.amazon.co.uk/">Amazon (GB)</ulink> n'a rien donné, ni
sur le site <ulink url="http://www.amazon.com/">Amazon
(USA)</ulink>. Par contre, des références à procmail existent dans les
livres publiés chez O'Reilly.</para>

      <para>Je tiens d'ailleurs à noter que je ne souhaite pas faire
      un repompage ou une traduction des documents que j'énumère ici,
      sinon ce ne serait pas du jeu. Si je trouve des morceaux
      intéressants sur le forum <literal>fr.comp.mail</literal> ou que
      quelqu'un m'envoie des informations intéressantes, je les inclue
      dans ce document.</para>
      
      <para>Voici une liste, non exhaustive évidemment, de sites
traitant principalement de procmail.</para>
      
      <sect3>
	<title>Sites en anglais</title>
	
	<itemizedlist>
	  <listitem><para><ulink
url="http://www.procmail.org/">Procmail.org</ulink> </para></listitem>

	  <listitem><para><ulink url="http://www.iki.fi/era/procmail/mini-faq.html">FAQ sur procmail</ulink>
</para></listitem>

	  <listitem><para><ulink url="http://www.procmail.org/jari/">Ressources sur Procmail</ulink>
</para></listitem>

	</itemizedlist>
	
      </sect3> <!-- url !FR -->
      
      <sect3>
	<title>Sites en français</title>
	
	<itemizedlist>
	  <listitem><para>un bon article sur procmail se trouve dans
	  le numéro 26 de la Linux Gazette : <ulink
	  url="http://www.linux-france.org/article/lgazette/issue-26/issue-26-4.html">Linux
	  Gazette en français</ulink> </para></listitem>

	  <listitem><para>ce document se trouve sur son site de
		référence : <ulink
		url="http://www.linux-france.org/article/appli/procmail.html">Linux-France</ulink>
		</para></listitem>
	  
	</itemizedlist>
	
      </sect3> <!-- url FR -->
      
    </sect2> <!-- ressources -->
    
    <sect2>
      <title>Remerciements</title>
      
      <itemizedlist>
	<listitem>
	  <para>Nat Makarévitch, pour l'hébergement sur Linux-France ;</para> 
	</listitem>

	<listitem>
	  <para>Stéphane Écolivet, mainteneur de la section
applications sur Linux-France, qui m'a poussé à faire ce document
quand il n'était qu'en gestation dans ma tête, et qui m'a fourni les
premiers patchs ;</para>
	</listitem>

	<listitem>
	  <para>Éric Jacoboni, qui a écrit la section sur
	  l'utilisation de Gnus avec Procmail ;</para>
	</listitem>

	<listitem>
	  <para>Thomas Nemeth, qui a donné la recette pour filtrer les
	  attachements, ainsi que d'autres éléments ;</para>
	</listitem>

	<listitem>
	  <para>Nicolas Le Scouarnec, Didier Belot, contributeurs de
	  nombreuses astuces ;</para>
	</listitem>

      <listitem>
      <para>les contributeurs du forum <literal>fr.comp.mail</literal>
      ;</para>
      </listitem>

	<listitem>
	  <para>tous ceux que j'ai oubliés, évidemment...</para>
	</listitem>
      </itemizedlist>
      
    </sect2> <!-- Remerciements -->
    
  </sect1> <!-- Conclusion -->
  
</article>

<!--
Local variables:
mode: sgml
End:
-->
