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
27
Embed
Utilisation de procmail - Linux-France :: Accueil · · 2001-01-05... une série de pointeurs vous permettra d’aller plus loin, ... pas paramétré pour utiliser procmail conjointement
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
"| 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é.
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 ) :
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.
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.
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
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>
• 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).
• 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).
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:
# 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 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
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
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)
: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