utilisation de procmail - linux-france :: accueil ·  · 2001-01-05... une série de pointeurs...

27
Procmail Utilisation de procmail Olivier Tharan <[email protected]> Ce document décrit l’utilisation de procmail dans la vie de tous les jours. 1. Introduction 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. Les recettes sont tirées de mon expérience personnelle, et représentent mes commentaires sur les documentations largement disponibles. 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. Ce document se trouve sur son site de référence (http://www.linux-france.org/article/appli/procmail.html). 1

Upload: lamngoc

Post on 19-Apr-2018

216 views

Category:

Documents


2 download

TRANSCRIPT

Procmail

Utilisation de procmail

Olivier Tharan<[email protected] ug.or g>

Cedocumentdécritl’utilisation deprocmaildansla vie detouslesjours.

1. Intr oductionCedocumentessaied’expliquercommentinstalleret utiliserProcmailpourfiltrer lecourrierélectronique.Procmailestun outil trèspuissantpourtraiter, dequelquemanièrequecesoit,descourriersélectroniques.Cedocumentessaiededonnerdesexemplessimplesàmettreenoeuvre,toutenn’oubliantd’expliquerle pourquoidecesexemples.

Lesrecettessonttiréesdemonexpériencepersonnelle,et représententmescommentairessurlesdocumentationslargementdisponibles.

NOTE : cedocumentestencoursd’élaborationet estévidemmenttrèsincomplet(maisil évoluepeuàpeu!). Lessourcescontiennentdescommentairesguidantun peul’évolutiondu document,leslire poursavoir oùajouterdeséléments,chercherle mot’FIXME’ ! Commeil aétérelu parpeud’autrespersonnes,il sepeutquecertainesinformationssoienterronées.

Cedocumentsetrouvesursonsitederéférence(http://www.linux-france.org/article/appli/procmail.html).

1

Procmail

1.1. Qu’est-ce que procmail ?Procmailestunoutil permettantprincipalementdefiltrer desmessagesélectroniques(ilnefautpasoublierformail, livréavecprocmail,qui estunadjointappréciableàcedernier).Il esttrèspuissantet sescapacitésdefiltragelui permettentdedélivrerdescourriersdansdifférentesboîtesauxlettres,delesrenvoyer, voire d’effectuern’importequelleactionenfonctiondufiltre désigné.

Procmailfonctionnegrâceàunsystèmederègles,qu’il parcourtlesunesaprèslesautres,afindedéterminersi le messagequ’il traitesatisfait àunerègleenparticulier, etexécutel’action associéeà la règletrouvée,le caséchéant.

Vousavezpeut-êtreentenduparlerdeprocmail.Vousavezpeut-êtrevu desrèglesprocmail,et vousêtesenfui encourantaprèsça(çasepeut!). Vousconnaissezlapuissancedeprocmail,maisvousnesavezpastropparoùcommencer. Cedocumentestpourvous.Il expliqueracommentinstallerprocmail,et commentl’utiliser demanièresimpleaudébut. Finalement,unesériedepointeursvouspermettrad’aller plusloin, unefois lesbasesassimilées.

Pré-requispourutiliser procmail:

• savoir utiliser le courrierélectronique(je nevaispasl’apprendreàvotreplace,maissi vousêteslà, c’estquevoussavez,n’est-cepas? ;-)

• avoir desconnaissancesdebaseenexpressionsrationnelles(lesfameusesregexp !),qui sontabondammentutiliséesdanslesrèglesdeprocmail.Rassurez-vous,j’essaieraidemettresuffisammentd’exemplespourquecelarestecompréhensible.Sinon,procmailutilise lesexpressionsrationnellesstandardsd’egrep, doncvouspouvezlire lespagesdemanuelegrep(1) etregex(7) pourplusd’informations.

2

Procmail

2. Installation de procmail

2.1. CompilationL’installationdeprocmailn’estpastrèscompliquée.Si vousn’êtespasl’administrateurdevotresystème,il faudracontactercedernierpoursavoir si procmailestinstalléoupassurle serveurdecourrier. Si vouspouvez(ou devez!) l’installer vous-même,cen’estpasdifficile. Engénéral,procmailestdistribuésousformed’un paquetpourlesdistributionsLinux (procmail-3.14-2.i386.rpm pourla Redhat-6.2,procmail_3.13.1-3.deb pourla Debian2.2,etc.)ou d’un port pourFreeBSD.Sivousnetrouvezpasdedistributionbinairepourvotresystème,il estpossibledelecompileràpartir dessources,quel’on peuttrouversurle sitedeprocmail(ftp://ftp.informatik.rwth-aachen.de/pub/packages/procmail/procmail.tar.gz)ouplusrapidementauLip6 (Jussieu)(ftp://ftp.lip6.fr/pub/unix/mail/procmail/procmail.tar.gz).La dernièreversionàcejour est3.15.

2.2. ConfigurationIl existeplusieursmanièresd’appelerprocmail,selonquel’administrateursystèmeestcoopératifou non! Il esteneffet possibled’utiliser procmaildemanièreglobale(procmailpeutservirdefiltre général,avantmêmela livraisondu courrieràchaqueutilisateur-- pourpasserun anti-virusà l’entréedusystème,parexemple),oubiendemanièreindividuelle(utilisationdeprocmailsansdisposerdedroitsparticuliersautresqueceuxdu répertoirepersonnel).

2.3. Installation personnelleIl estpossibled’installerprocmailpourunusagepersonnel,si jamaisle systèmen’estpasparamétrépourutiliserprocmailconjointementavecle serveurdecourrier. Pourcela,la documentationdeprocmailindiquedemettrela ligne suivantedansle fichier.forward devotrerépertoirepersonnel:

3

Procmail

"| IFS=’ ’&& exec /usr/bin/procma il -f-||exit 75 #MON_LOGIN"

Notezle « tube» (|) endébut deligne 1 ! Le fichier.forward estcherchéparleserveurdecourrieràchaquecourrierqui nousestdestiné; si cefichierexiste,il permetdedéfinir, soit uneadresseà laquelleredistribuer(= forwarder)le courrier, soitunecommandeà traverslaquelleon passele courrier. Dansnotrecas,on indiqueauserveurdecourrierdepasserlescourriersentrantsnousétantdestinésà traversla commandeprocmail.

3. Interaction avec le reste du système

3.1. Procmail comme livreur de courrierUnemanièretrèsutile demettreprocmailàdispositiondetouslesutilisateursestdel’installer commeoutil delivraisonducourrierenlocal.procmailesteneffet aussiunMDA (Mail DeliveryAgent,outil delivraisondecourrier),c’est-à-direquele courrierlocal traitéparle serveurdecourrierestenvoyéà procmailpourquecedernierplacelecourrierdanslesboîtesauxlettresdesdestinataireslocaux(engénéral,dans/var/mail/login).

Demanièrehistorique,c’estl’outil /bin/mail qui faisaitofficedelivreurdecourrierlocal. Il a tendanceàêtreremplacéparprocmail,carcedernierpermetaussidefiltrer lecourrierentrant.L’un desinconvénientsdeprocmailestqu’il estpluslourdà lanceràchaquefois qu’uncourrierdoit êtrelivré.

Parcontre,unefois installédemanièreglobale,procmailpeutservirdefiltre pourlespersonnesqui le désirent,et commesimplelivreurdecourrierpourlesautres.Il suffitpourlespremiersd’avoir unfichierdeconfiguration.procmailrc dansleur répertoirepersonnel.Si cefichiern’estpasprésent,procmaillivrerale courrierdansla boîteauxlettreshabituelledela personne.

4

Procmail

L’installationdeprocmailcommeMDA local estrelativementsimplepourlesserveursdecourrierlespluscourants.Étudionslescaslespluscourants.

3.2. Procmail et SendmailSi vousparamétrezsendmailaveclesmacrosm4, il suffit deplacerla ligne suivantedanssendmail.mc (ouconfig.mc suivantl’Un*x utilisé 2 ) :

FEATURE(local_pr ocmai l) dnl

et,si votreprocmailn’estpasdans/usr/local/bin 3 :

define(‘PROCMAIL _MAIL ER_PATH’, ‘/usr/bin/procma il’ )d nl

3.3. Procmail et PostfixPourutiliser procmailavecPostfix,rien deplussimple: renseignezla lignemailbox_commanddu fichiermain.cf 4 , enindiquantle chemincompletversprocmail.Parexemple:

mailbox_command = /usr/bin/procma il

3.4. EximPourutiliserprocmailavecExim, il fautremplacerle contenuhabitueldu~/.forwardpar:

|/usr/bin/procma il

5

Procmail

Cettesolutiondevrait enfait fonctionneravectout serveurdecourrierpossédantunecompatibilitéprochedeSendmail.Si quelqu’unaunesolutiongénériquenenécessitantpasl’écritured’un fichier~/.forward, elle estla bienvenue!

3.5. Autres serveur s de courrierFIXME: qui aenvie d’écrirelà-dessus?QMail, etc.

3.6. Procmail et fetchmailCeuxqui seconnectentépisodiquementà InternetparuneliaisonPPPutilisentpeut-êtrefetchmailpourrécupérerleur courrierdepuisle serveurPOPou IMAP deleurfournisseurd’accès.fetchmailestun trèsbonclient POP/IMAP, queje vousrecommande.

En tempsnormal,fetchmailrécupèrele courriersurle serveurdistantet l’adresseauserveurdecourrierlocal,surle port25 (SMTP).Cetteméthodefonctionnesi vousavezconfiguréun serveurdecourriersurvotremachine(Sendmailou Postfix),maisestrelativementlourdecarunefois passéàSendmail,le courrierfinira parpasserdanslesmainsdeprocmail.On peutéviterun sautsupplémentaireenfaisantpasserle courrierdirectementdefetchmailàprocmail.Pourcela,il suffit d’ajouterl’option deconfigurationsuivantedansle fichier.fetchmailrc :

mda "/usr/bin/procmai l -Y -d %T"

Le paramètre-mda passéenlignedecommandefait la mêmechose.

3.7. Configurer Gnus pour qu’il utilise procmailÉric Jacoboniacontribuécettesectionsurl’utilisation deGnusconjointementàProcmail.Gnusestsuffisammentimportantet puissantpourqu’ondoive le configurer

6

Procmail

demanièreà l’utiliser proprementavecprocmail.

Gnuspermetdecréerdefaçonsimpledesdossiersdecourrierselonlescritèresdevotrechoix : il suffit d’utiliser la fontionnnmail-split-methods et despécifier,pourchaquedossier, l’expressionrationnellesurlaquelleon sebaserapourclasseruncourrierdanscelui-ci.

Voici, parexemple,cequepourraitcontenirun.gnus pouractivercettepossibilité:

;; On utilise le backend nnml pour le courrier (car par défaut,;; Gnus lit les news...)(setq

gnus-secondary-se le ct -meth ods ’((nnml ""))mail-sources

’((directory:path "~/incoming/" ;; cf. variable MAILDIR de .procmailrc:suffix "" )

))

Ici, nousavonschoisid’utiliser le répertoireincoming commesourcedecourrier,c’estcelui oùprocmailrangesesdossiers.GnustranfèreraalorslescourriersdanslesrépertoirescorrespondantsdeMail (c’estle répertoirepardéfaut).

Toutefois,cetteméthodeaquelquesinconvénients: le principalestqu’elle fait doubleemploisi l’on utilisedéjàprocmailpour, parexemple,mettreauxoubliettesdescourriersdeprovenancedouteuse,ou poursupprimerlesdoublons(voirprécédemment).Un autreinconvénientestqu’elleestpropreàGnus,cequi rendobsolètestouscesdossierssi l’on décidedechangerdeMUA (maisquelleidéesaugrenue...).

Pourcetteraison,il estplussagedeconfigurerGnuspourqu’il utiliseprocmailpourgérercesdossiers:

;; Utilisation du backend nnml avec procmail;; nnmail-procmail- di re cto ry correspond à la variable MAILDIR;; de votre .procmailrc(setq

gnus-secondary-se le ct -meth ods ’((nnml ""))

7

Procmail

gnus-use-procmail tnnmail-spool-file "procmail"nnmail-procmail-d ir ec tor y "~/incoming/"nnmail-procmail-s uf fi x ""

)

;; Pour les nouvelles versions de Gnus (>= 5.8.7)(setq mail-sources

(list ’(directory:path "~/incoming/":suffix ""

))

)

et c’esttout...Gnusutiliseralesrèglesdéfiniesdansvotre.procmailrc pourcréersesdossiersdecourrier.

Le principeestsimple: lorsquevouslancerezGnus,celui-ci ira consulter~/incomingoù doiventsetrouver lesdifférentsfichierscréésparprocmail.Si cesfichiersnesontpasvides,il leslit et transfèrelescourriersqu’ils contiennentdanslessous-répertoiresde~/Mail encréantun fichierparcourrier. Aprèscetteétape,lesfichiersde~/incoming sontdonctousvides.

Si vousavez,parexemple,lesrèglessuivantesdansvotre.procmailrc :

# *FreeBSD-Stable:0* ^TO.*stable@FreeB SDFreeBSD-Stable

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

# *Perso:0* ^TO.*moiPerso

8

Procmail

# *Le-reste:0* ^TO.*Le-Reste

Vousaurezlesfichiers~/incoming/FreeBSD-Stable, ~/incoming/Systeme,~/incoming/Perso et~/incoming/Le-Reste qui seremplirontaufur etàmesurequevousrecevezdesmessagescorrespondantauxrèglesci-dessus.En lançantGnus,celui-ci créera(si cen’estdéjàfait) lesrépertoires~/Mail/FreeBSD-Stable,~/Mail/Systeme, ~/Mail/Perso et~/Mail/Le-Reste et chacund’euxcontiendradesfichiersportantdesnomssurle mêmeprincipequ’unspooldenews :

% ls -l ~/incoming/Pers o-rw------- 1 moi moi 0 26 jul 14:05 /home/moi/incomi ng/P ers o

^^^

% ls ~/Mail/Perso1 11 13 2 4 6 810 12 14 3 5 7 9

L’avantagedecetteméthodeestdecentraliserle triageducourrierenun seulendroit:.procmailrc. D’autrepart,procmaildisposedemoyensbienplusperfectionnéspourspécifierlesexpressionsrationnelles(la macro^TO_,notamment).

Parcontre,Gnusconsidèreraquechaquefichier de~/incoming contientunelistedecourriers: si vousavezdonccrééunfichiermsgid.cache danscerépertoireaveclarègle

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

vueplushaut,Gnusseplaindraquecedossiern’estpasaubonformat.Pourréglerceproblème,il suffit demodifiercetteentréeen:

:0 Wh: msgid.lock

9

Procmail

| formail -D 8192 /tmp/msgid.cach e

cequi a l’avantagesupplémentairedenettoyercefichieràchaqueredémarragedevotresystème(s’il estconfigurépournettoyer/tmp).

Ressources:

Commed’habitude,le fichier info deGnusdonnetouslesrenseignements(Rubrique’SelectMethods’-> ’GettingMail’ -> ’Mail andProcmail’).

La FaqGnus(http://www.ccs.neu.edu/software/contrib/gnus/)contientégalementunerubriquesurcetteconfiguration(contributiondeRandalSchwartz).

GnusRuLeZ!

3.8. Utilisation de Mutt avec ProcmailMutt s’accomodetrèsbienà la sauceprocmail.Il lit lesboîtesauformatmbox, formatpardéfautsousUnix, qui estle formatstandardécrit parprocmail.Il suffit doncd’indiqueràmutt le répertoirequ’utiliseprocmailpourstocker lesboîtesauxlettres.Sivousutilisezla configurationindiquéeci-dessous,le répertoireest$HOME/Mail, qui estle répertoirepardéfaututilisé parmutt.La boîteauxlettresnormale,celleoù procmailstockerale courrierqui n’a pasététrié et quemutt lira audémarragesansautreindicationdevotrepart,est/var/mail/$LOGIN (ou/var/spool/mail/$LOGIN).

Si vouschangezle répertoireoùprocmailstockerale courrier, il fautaussil’indiquer àmutt,enutilisantla variablefolder. Par exemple: set folder=~/courrier dansvotre.muttrc. Voir la variableMAILDIR deprocmail.

Si vousmodifiezla boîteauxlettressystème(celleoù devraientêtrestockésvoscourriersendéfinitive)avecla variableDEFAULT deprocmail,il faudraaussil’indiqueràmutt.Pourcela,vouspouvezsoit utiliser la variablespoolfile danslaconfigurationdemutt : set spoolfile=~/Mail/inbox, soit positionnerla variabled’environnementMAIL.

Touscesrenseignementssetrouventdansle manueldemutt (installéengénéraldans/usr/share/doc/mutt/manual.txt).

10

Procmail

4. Configuration de procmailL’utilisation deprocmailrevientàpeuprèsàsecréerunfichier deconfiguration; c’estpeut-êtrela partiela plusdifficile du parcours,maisavecdesexemplesbienchoisis,c’estplusclair.

4.1. Écriture du fic hier .procmailr cLe fichier.procmailrc estunecombinaisond’assignationsdevariableset derecettes. Lesrecettesprocmailsontcomposéesdetroisparties:

• l’en-têteet sesoptions;

• lesrèglesdecorrespondance: expressionsrationnellessurlesen-têteset corpsdesmessagespermettantdedéterminersi le messagevaêtretraitéparcetterecette;

• l’action associéeàcetterecette.

La premièrecorrespondancetrouvéel’emporte,et terminela lecturede.procmailrc; si aucunecorrespondancen’esttrouvée,le courrierestlivrédansla boîteauxlettrespardéfaut(/var/mail/toto parexemple).

4.1.1. Variab les

Il estpossiblededéfinir desvariablesdansle fichier deconfiguration.procmailrc.Certainesd’entreellesaurontunesignificationparticulièrepourprocmail,alorsquelesautrespeuventêtreutiliséesdanslesrèglesqui suivrontcommedesvariablesnormales.Voici unexemplecommenté:

# Variables spéciales pour procmail

# caractère verbeux de procmail ; mettre ’yes’ per-met d’avoir des messages# supplémentairesVERBOSE=no

11

Procmail

# pas obligatoire : procmail détermine votre nom de lo-gin 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 mini-mum, pour n’accéder qu’aux# programmes indiqués dans le fichier de configurationPATH=/bin:/usr/b in: /u sr /lo ca l/b in :/ home/ tot o/ bi n

# réper-toire où seront stockés les mails ; s’assurer que votre MUA sait y# accéder aussiMAILDIR=/home/to to/ Mail

# si procmail n’arrive pas à délivrer le cour-rier, cette boîte sera utilisée# en dernier ressort : il vaut mieux définir cette variable !ORGMAIL=$MAILDIR/emer gency -i nbox

# boîte de réception par défautDEFAULT=/var/mai l/t ot o

# 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/.p ro cmail .l og

Lesautresvariablesutiliséesou définiesparprocmailsontdécritesdansla pagedemanueldeprocmailrc(5).

4.1.2. Séparer le fic hier en plusieur s par ties

Il estpossibledescinderle fichier .procmailrcenplusieursparties,afin d’enaméliorerla lisibilité. En fait, onpeutinclureun fichiergrâceà la directivesuivante:

12

Procmail

INCLUDERC=nom_de_fi ch ie r

oùnom_de_fichier estle fichier à inclureà l’endroit dela directive,c’estsoit unchemincomplet,soit un cheminrelatif aurépertoirecourant.On peutincluredesfichiersdefaçonimbriquéesansaucunproblème.

4.1.3. Recettes

Unerecettea le formatsuivant:

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

Unerecettecommencepar:0 ; surla mêmeligne,on ajouteradesdrapeauxsupplémentairesselonlescas.Lesdrapeauxsontdécritsdansla pagedemanueldeprocmailrc(1). Lesplusutiliséssont:

• H : passel’expressionrationnellesurlesen-têtesdu message;

• B : idemsurle corps;

• h : n’envoie quelesen-têtespourtraitement;

• c : gardeunecopiedumessagepourtraitementultérieur

Finalement,enfin deligne,on ajoutera: si ondésireun fichierdeverrou(afindenepascorrompreunfichier eny écrivantsimultanémentdeuxcourriers).

Leslignessuivantesindiquentzéroou plusieursconditions,chacunesurunelignedifférente,permettantdetestersi uncourriercorrespondàcequel’on cherche.Lesconditionscommencentparle caractère* et tout cequi suit estenvoyéà la commandeegrep interneàprocmail.Il fautquetouteslesconditionssoientvraiespourconsidérerla recettecommevraieet activer l’action qui suit (conditionsdetypeAND).

Finalement,l’action àeffectuersi lesconditionsontétévérifiéessont:

13

Procmail

• la redirectionversunfichier : actionla pluscourante,elle permetdedélivrer lecourrierdansla boîteauxlettresindiquée.Il faudrafaireattentionàspécifierunverrouaudébut dela recette.Il suffit d’indiquersurla ligne le nomdu fichierou durépertoiredanslequelstocker le courrier;

• la redirectionversunprogramme: cetteactionpermetd’envoyer le courriersurl’entréestandardd’un programmequi s’occuperaducourrier. Le verroun’estplusnécessaire,et on indiquerala redirectionencommençantla ligneparunebarreverticale(|) puisla commandeàexécuter;

• l’envoi versuneautreadresseélectronique: le verrouestinutile, et la ligned’actioncommenceraparunpoint d’exclamation,suivi del’adressederenvoi.

4.2. Quelques recettes utilesVoici unelistedésordonnéederecettesdebasequi pourrontêtreutiles,et qui sontdifférentesdesrèglesqu’on trouvedanslespagesdemanueldeprocmail.

1. Negarderqu’unseulexemplaired’un mail, mêmesi on le reçoitdeuxfois ; utile,parexemple,quandon reçoituneréponsed’unelistedediffusion,à la foisdirectementet parl’intermédiairedela liste. Il estpossiblederéglerla taille ducacheenchangeantle nombre(8192).

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

2. Cesrèglespermettentdetrier unelistedediffusiondansundossierséparé,afindenepastrop encombrerla boîteauxlettresnormale.

Imaginonsqueje soisabonnéà la listePostfix-Fr. L’adressepourenvoyerunmessageàcettelisteest<[email protected]>, maisquandvousenrecevez,l’adressedel’expéditeurest<[email protected]>. Il nousfautdonctrouverune

14

Procmail

expressionsuffisammentcomplètequi nouspermettederepérerun tel messagesansambiguïté.Unetelle expressionpeutêtreexpriméeparla règlesuivante:

:0:* ^From.*postfix-f r- ownerpostfix-fr

Danscetterègle,nousrecherchonssi l’en-têtereprésentantl’expéditeur(la partie^From del’expressionrégulière)contientla chaînepostfix-fr-owner, et sic’estle cas,plaçonsle courrierdansla boîteauxlettresnommée« postfix-fr ».

Pourtrier d’autreslistesdediffusion,le principeestle même: trouvezdanslesentêtesdescourriersdesélémentssuffisammentsignificatifssurlesquelsvousbaserezvotretri (From.*liste-owner pourunelisteSympa,From.*owner-liste pourunelisteMajordomo,From.*liste-admin pourunelisteMailman,etc.).

3. La règlequi suit permetdetrier un courriersursonsujet,cequi permetdefiltrercertaineslistesdediffusionajoutantsystématiquementleur nomdansle sujetducourrier. Vouspouvezaussidiscuterd’un thèmeprécisavecdesamis,descollèguesenconvenantd’un mot-clédansle sujet.

:0:* ^Subject:.*\[bla gue\]copains/blagues

Touslescourriersdontle sujetcontientla chaîne[blague] (aveclescrochets)iront dansle dossierblagues setrouvantdansle sous-répertoirecopains devotrerépertoiredecourrier. Lescrochetssontéchappésparunebarreobliqueinverse(\) caril s’agit d’uneexpressionrationnelledanslaquellelescrochetsontunesignificationparticulière.

4. La règlesuivante,assezimpressionnante,permetdetrier enunseulcouptouslescourriersarrivantdelistesdediffusionsimilaires.L’exempletypiqueenestles

15

Procmail

listesdediffusiondu projetDebian(http://www.debian.org/), auxquellesla règlefait référence(maiscelapourraitfonctionneraussipourleslistesFreeBSD;-) :

:0 H* ^X-Mailing-List: .* [<] .* li sts \. deb ia n\ .or g[ >]* ^X-Mailing-List: .* [<] *\/[^ ][^@]*$MATCH

Cetterègleà l’apparencebarbares’appuiesurle fait quelescourriersdeslistesDebiancontiennentl’entêteX-Mailing-List:[email protected], et quela variable$MATCH contientcequi aététrouvédansl’expressionrationnelleprécédenteà partir de\/. Pourclarifier,l’expression\/[^ ][^@]* « correspondra» àun début d’adresseélectronique(sansla partiedomaine)et seraaffectéà la variable$MATCH. Pourla [email protected] parexemple,le courrierdoncseraplacédansle dossierdebian-french.

CetteméthodefonctionnepourtoutesleslistesDebian,si vousêtescommemoiabonnéàplusieursd’entreelles.

5. Question: je récupèremoncourrierdepuisuneseuleadresse,et j’aimeraisle trierenfonctiondudestinataire,selonquel’adressesoitJean Dupont

<[email protected]> ouSuzanne Dupont <[email protected]>.

Unesolutionpeutêtred’utiliser fetchmail et sonmodemultidrop, oubienlesrèglesprocmailsuivantes:

:0* ^TO_Suzanne.*Dup ont! suzanne

:0* ^TO_Jean.*Dupont! jean

Faitestoutefoisattentionàcequ’uneboîteauxlettresrécupèrele courrierquiseraitéventuellementpasséà travers; ceserale casquandl’adressedu destinataire

16

Procmail

n’aurapasla formesouhaitée.C’estentoutcasunefaçonrapide,maispeuefficace,dedistribuerdu courrierenprovenanced’uneseuleadresseàdestinationdeplusieurspersonnes.Unesolutionpluspratique,parexemple,estd’utiliser UUCP.

6. L’utilisation la plusattenduedeprocmailestle traitementdesspams.Bienqu’ilsoitpossibledelesbloquerplusenamont(listesnoiresaveclesserveursdecourriers,commeRSS,ORBS,MAPS,etc.),ondétestegénéralementlesvoirarriverdansla boîteauxlettres.JevousrenvoiesurlessitesstyleCauce(http://www.cauce.org/) pourlesraisonsphilosophiquesdela luttecontrele spametproposeunesolutionsimplepourmettredecôtélescourriersnondésirés.Jen’indiquepascommentlesjeter(/dev/null) carj’ai eudemauvaisessurprises:mieuxvautavoir un oudeuxspamsdansla boîtequ’un courrierimportantà latrappe!

La règlequi suit utilise la méthodedela « listenoire», quel’on gèreeninsérantdansun fichieruneadressenondésirée,voire uneexpressionrationnellesi l’onveutbloquerundomaineentier, parexemple.Elle utilisedeuxprogrammes,extract-addrs etmatch-email-addr tirésdela définitiondecetterègleadaptéedelistenoire.Pourl’historique,je mesuisbasésurlesrèglesdeLarzWirzenius(fameuxancienmodérateurdecomp.os.linux.announce)disponiblesàhttp://www.iki.fi/liw/mailfilter .html ; RichardGooch(fameux« hacker» dunoyauLinux, entreautres)a adoucicesrègleset metlessourcesdesdeuxprogrammescitésàdispositionà ftp://ftp.atnf.csiro.au/pub/people/rgooch/5 .

Compilezcesdeuxprogrammes,mettez-lesàun endroitaccessibleparprocmail(rappelez-vousdela variablePATH du.procmailrc), et incluezla règlesuivante:

# À modifier selon les casBLACKLIST=$MAILDIR /. bla ck li st

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

# Si on a trouvé une adresse de spammeur (ci-dessus), alors...:0 a{:0:

17

Procmail

junk/spam}

Mettezdepréférencecetterègleversla fin devotrefichier deconfigurationprocmail,carelle passele courrierà traversdeuxtubeset estun peuplusgourmandequelesautresvuesauparavant.Lesdeuxpremièreslignesenvoientlecourriersurextract-addrs qui extrait lesadressesélectroniquesdu messageetlesenvoie àmatch-email-addr qui lescompareraavecle contenudela listenoire.

Encasdecorrespondance,le résultatdela commandeserapositif et la règlesuivanteseraexécutée,cequi abasiquementpoureffet demettrele courrierdecôté.Lisezcetteboîtedetempsentemps,onnesait jamais...

Le contenudufichier delistenoireestle suivant.Jevousconseillevivementdecréervous-mêmevotrefichierdelistenoire,aufur et àmesuredesnouveauxspams.Coupléeà d’autresrègles(pasdeHTML, est-cequele courrierm’estbienadressé,etc.),cetteméthoderéduiténormémentle nombredespamsdansla boîteprincipale(maispasle nombreabsoludecourriersnonsollicités,hélas).

# 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 »[email protected] mfriend@everywher e. co [email protected] te .c om

# quelques expressions rationnelles ; je suis un peu bour-rin sur ce coup# le mot-clé !regexp est important!regexp [@.]msn\.com!regexp [@.]aol\.com!regexp [.@]writeme\.com

Note: cepassagesurle spamdevrait fairel’objet d’unesectioncomplètepourlaprochainerévisiondu document.

18

Procmail

4.3. Utilisation en dehor s d’un serveur de courrier

4.3.1. Formail

Pourretraiteruneboîteauxlettresnontriéeavecunfiltre particulier, onpeututiliserformail, qui appelleraprocmailàsontour. Exemplepratique:

formail -s procmail fichier_filtre < boite_a_traiter

oùfichier_filtre estun fichiercontenantlesrèglesprocmailnécessairesautraitementdu fichieretboite_a_traiter estla boîteauxlettrescontenantlescourriersàfiltrer.

On peutomettrefichier_filtre, auquelcasle fichier deconfigurationpardéfaut(.procmailrc) serautilisé.

Formail permetbiend’autreschosesutiles,notammentcelled’extrairedeschampsparticuliersdesentêtesd’un courrier, ou d’ajouterdesentêtesparticuliers.Cecipeutêtreutile dansle casd’un répondeurautomatique(explicationdécortiquéedanslasectionsurl’utilisation avancéedeprocmailci-dessous).

L’utilisation deformail estdocumentéedansla pagedemanuelformail(1).

4.3.2. Mailstat

Si vousgénérezdestracesdel’utilisation deprocmail(parl’utilisation dela variableLOGFILE, parexemple),vousaurezenvie d’enavoir un condensérégulier; leslireexhaustivementpeutprendredu temps.L’outil « mailstat», livréavecProcmail,peutserviràcela6.

La commandesimplesuivantepermetdegénérerun résumédestracesdeprocmailtoutengardantle fichier detraceintact:

mailstat -klm procmail.log

19

Procmail

Le scriptsuivantpermetuneutilisationplusavancée,à lancerrégulièrement(unefoisparsemaine,parexemple):

#! /bin/sh# zerostat : archive les logs de procmail, envoie un ré-sumé par email

# Variables à modifier en fonction de votre environnement

# mettre votre loginMOI=toto

# indiquer le fichier de traceLOGFILE=~/Mail/. pro cmai l.l og

# utilisez gzip ou bzip2, au choixZIPEXE=bzip2

PATH=/bin:/usr/b in: /u sr /lo ca l/b in

mailstat -l $LOGFILE | \mail -s ’Statistiques procmail’ $MOI$ZIPEXE -f ${LOGFILE}.old

L’utilisation demailstatestdocumentée(succintement)dansla pagedemanuelmailstat(1). Nepasoublierdepasserle nomdu fichierà traiterenparamètre!

5. Utilisation avancéeOn peututiliser procmailpourd’autresutilisationsavancées,notammententantquefiltre globalpourtraitertout le courrierentrant.Lesutilisationspossiblessontdepouvoir filtrer lesspams,lesvirus, fairedesactionsdéfinies,avantquele courriernesoit délivréàchaqueutilisateur. Cecipeutêtretrèspratiquesurun relaisdecourrieràl’entréed’uneorganisationparexemple.

20

Procmail

Uneautreutilisationpossibleestdemettreenplaceun répondeurautomatique.Celapeutservirà plusieurschoses.

• Mettreun répondeurquandon partenvacanceset qu’on nerépondrapastoutdesuite,maisensignalantà l’expéditeurquele messageestconservé(principeduprogrammevacation).

Problèmesposés: nepasrépondredeuxfois à la mêmepersonne(utilisationd’unhachagepourrepérerlespersonnesauxquellesle filtre a déjàrépondu),nepasrépondreauxlistesdediffusion(c’esttrèsennuyeux,onsupposeraqueleslistessontdéjàtriéesquandle messagearrive,on vérifieraquandmêmequ’on netombepassurungestionnairedelistes,etc.).

• Faireun mini-serveurdefichiers,déclenchéparunebalisespécialedansle sujet(exemple: Subject: GET liste-fichiers.gz)

Problèmesposés: selimiter àunelistedefichierdéterminée,nepasaccepterlescaractèresbizarresqui pourraientcréerun trou desécuritéet permettredeservirn’importequelfichier dusystème.

5.1. Refuser des attac hements (Word, HTML, etc.)ThomasNemetha donnéla recettequ’il utilise pourfiltrer desmessagescontenantdesattachementsindésirables: scriptsVisualBasic(.vbs), desexécutablesWindows(.exe), desdocumentsWord (.doc) ou Excel(.xls). Cetterecettea poureffet derenvoyerun messageà l’expéditeurlui demandantdenepasenvoyercegenred’attachements.

:0 HB* ^Content-Type:.*\ .( ex e|v bs |do c| dot|x ls )*$ !X-Loop:.*$MOI| (formail -rtk -p ’| ’ \

-A "X-Loop: $MOI" \-A "Precedence: junk"; \cat $HOME/.procmail /ba df ile ) | $SENDMAIL -t -oi

21

Procmail

Cetterecetteutiliseprincipalementformail pourgénérerun messaged’auto-réponse.On recherche,à la fois danslesen-têteset dansle corps(drapeaux’H’ et ’B’), unen-têteMIME décrivantle contenu(Content-Type) et indiquantun nomdefichierseterminantparlesextensionsdéfiniesdansl’expression(exe|vbs|doc|dot|xls).Libre àvousd’enajouteroud’en retirer.

En casdecorrespondance,ongénèreuneréponseautomatique,qui incluerale messagecomplet: celui-ciestdoncperdupourun traitementultérieur, copiez-lesi vousvoulezle garderquandmême.Lesoptionsutiliséessontdécritesdansla pagedemanueldeformail. On inclut le messaged’origine,puisun messageexpliquantle refuset le toutestpasséàSendmail.

Vousavezsûrementremarquéla troisièmelignedecetterecette.Expliquons-laplusendétail.Quandnousgénéronsle message,nousajoutonsun en-têteX-Loop contenantnotreadresseélectronique(la variable$MOI està renseigneraudébut dufichier deconfiguration),qui serviraàprocmailpourtestersi le messageestdéjàpasséentresesmains.Ceciaunbut : éviterlesbouclesdecourrier, qui peuvents’avérertrèsgênantesàdécouvriret à réparer. On testedoncaveccetterèglequele messagen’a pasdéjàsubiun filtrage.Le signe$ derrièrel’étoile endébut deligne indiqueàprocmailquesetrouventdansla lignedesvariablesqu’il faudrasubstituer(ici, $MOI).

Il estpossibled’optimisercetterecette,pourcoller plusspécifiquementauformatMIME. En effet, l’en-têteContent-Type contientle typeMIME del’attachement,quiestplusdoncplusfiableàchercherquel’extensiondunomdefichier. On pourraitécrirela deuxièmeligneainsi,pourchercherlesattachementsbinairesWindows,parexemple:

* ^Content-Type:.*a ppli cat io n/o ct et -st re am. *n ame=. *\ .ex e

L’expressionrationnellecherchelesen-têtesreprésentantun attachementdetypeapplication/octet-stream, dontle nomseterminepar.exe. On peutfairedemêmeavecd’autrestypesd’attachement,le mieuxestdetester. Le tableausuivant

22

Procmail

représentedesattachementscourantsavecleur typeMIME correspondant:

Table 1. Attachements et types MIME

type MIME extension nom courant

application/octet-stream .exe binaireWindows

application/msword .doc documentWord

application/vnd.ms-excel .xls documentExcel

application/vnd.ms-powerpoint

.pps,.ppt documentPowerPoint

application/x-zip-compressed

.zip documentcompresséZip

application/x-unknown-content-type-hlpfile

.hlp documentd’aideWindows

application/pdf .pdf documentPDF

image/jpeg .jpg, .jpeg imageJPEG

image/gif .gif imageGIF

text/html .htm,.html documentHTML

text/x-vcard VCardNetscape

6. Conc lusion

6.1. Quelques ressour ces en ligneJevaistenterderésumerlesprincipalesressourceset documentationsdisponiblessur

23

Procmail

procmail.Il n’existepasàmaconnaissancedelivresurprocmail: unerecherchesurlachaîneprocmail surle siteAmazon(GB) (http://www.amazon.co.uk/)n’a rien donné,ni surle siteAmazon(USA) (http://www.amazon.com/).Parcontre,desréférencesàprocmailexistentdansleslivrespubliéschezO’Reilly.

Jetiensd’ailleursà noterqueje nesouhaitepasfaireun repompageouunetraductiondesdocumentsquej’énumèreici, sinonceneseraitpasdu jeu.Si je trouvedesmorceauxintéressantssurle forumfr.comp.mail ou quequelqu’unm’envoie desinformationsintéressantes,je lesincluedanscedocument.

Voici uneliste,nonexhaustiveévidemment,desitestraitantprincipalementdeprocmail.

6.1.1. Sites en anglais

• Procmail.org (http://www.procmail.org/)

• FAQ surprocmail(http://www.iki.fi/era/procmail/mini-faq.html)

• RessourcessurProcmail(http://www.procmail.org/jari/)

6.1.2. Sites en français

• unbonarticlesurprocmailsetrouvedansle numéro26dela Linux Gazette: LinuxGazetteenfrançais(http://www.linux-france.org/article/lgazette/issue-26/issue-26-4.html)

• cedocumentsetrouvesursonsitederéférence: Linux-France(http://www.linux-france.org/article/appli/procmail.html)

24

Procmail

6.2. Remerciements

• Nat Makarévitch,pourl’hébergementsurLinux-France;

• StéphaneÉcolivet,mainteneurdela sectionapplicationssurLinux-France,qui m’apousséà fairecedocumentquandil n’était qu’engestationdansmatête,et qui m’afourni lespremierspatchs;

• Éric Jacoboni,qui aécrit la sectionsurl’utilisation deGnusavecProcmail;

• ThomasNemeth,qui adonnéla recettepourfiltrer lesattachements,ainsiqued’autreséléments;

• NicolasLe Scouarnec,Didier Belot,contributeursdenombreusesastuces;

• lescontributeursdu forumfr.comp.mail ;

• tousceuxquej’ai oubliés,évidemment...

Notes1. et toutesmesexcusespourl’avoir oubliéaudébut...

2. Cefichier estgénéralementsituédans/etc/mail oudans /etc/sendmail,voire,d’aprèsÉric Jacobonidansl’article Configurationsimple(ou simplifiée)desendmailpourPPP(http://www.linux-france.org/article/mail/sendmail/sendmail.html), dans/usr/lib/sendmail-cf/cf si le systèmeutilisé estunedistributionRedHatdeLinux.

3. /usr/local/bin/procmail estl’emplacementpardéfautdeprocmail selonsendmail.

4. Cefichier setrouveengénéraldans/etc/postfix.

5. Le parcoursdesrèglesdecesdeuxpersonnesesttrèsinstructif et témoignentd’uneutilisationavancéedeprocmail.

25

Procmail

6. Nepasconfondreavec« mailstats» (notezle ’s’), utilisé avecSendmail!

26