Provided by:
manpages-cs_0.17.20080113-1_all 
JMÉNO
procmailrc - konfigurační soubor programu procmail
POUŽITÍ
$HOME/.procmailrc
POPIS
Chcete-li rychle začít, podívejte se na POZNÁMKY na konci manuálové
stránky. procmail(1).
Tento konfigurační soubor může obsahovat směs přiřazení do proměnných
prostředí (z nichž některé mohou mít pro procmail zvláštní význam) a
předpisů. V nejjednodušší podobě obsahují předpisy jednořádkové
regulární výrazy vyhledávané v hlavičce přijaté e-mailové zprávy. První
předpis, který nalezne shodu s regulárním výrazem, potom určí kam se
zpráva dále přesune (obvykle do souboru). Pokud se zpracování dostane
až na konec rc souboru, procmail doručí e-mailovou zprávu na $DEFAULT.
Existují dva druhy předpisů: doručující a nedoručující. Pokud je
nalezena shoda v doruujcm pedpisu, procmail považuje zprávu (ano,
uhádli jste) za doručenou a ukon zpracovn konfiguračního souboru po
úspěšném provedení akčního řádku předpisu. Pokud je nalezena shoda v
nedoruujcm pedpisu zpracování bude pokraovat i po provedení
akčního řádku tohoto předpisu.
Doručující předpisy jsou ty, které způsobí, že hlavičky a/nebo tělo
zprávy jsou zapsány do souboru, použity nějakým programem nebo
přesměrovány na nějakou poštovní adresu.
Nedoručující předpisy jsou ty, které způsobí, že výstup nějakého
programu nebo filtru je znovu zachycen procmail-em, nebo předpisy,
které otevírají vnořený blok.
Procmailu můžete říci, že má zpracovávat doruujc pedpis jako
nedoručující, když uvedete příznak 'c' v hlavičce předpisu. To přinutí
procmail vytvořit kopii právě zpracovávané zprávy. Zpráva je tudíž
doručena podle předpisu, ale zároveň se s její kopií pokračuje ve
zpracování konfiguračního souboru.
Použitím libovolného počtu předpisů můžete svou příchozí poštu velmi
přímočarým způsobem roztřídit do několika složek. Avšak mějte na
paměti, že do těchto složek mohou přicházet současně různé zprávy
(jestliže běží více instancí procmailu, což není neobvyklé při větším
množství došlých zpráv). Aby v tom případě ve složkách nevznikl
zmatek, velmi doporučujeme vhodně používat zámků (angl. "lock files").
V konfiguračním souboru lze libovolně míchat přiřazení do proměnných
prostředí a předpisy. Proměnné, které mají v procmailu zvláštní
význam, budou použity příslušným způsobem v momentě zpracování řádku
kde se vyskytují (tzn. že můžete kdykoliv změnit pracovní adresář
zadáním nové hodnoty MAILDIR, přepínat zámky přiřazením do LOCKFILE,
kdykoliv změnit umask, atd., možností je nekonečně mnoho :-).
Přiřazování a substituce těchto proměnných se provádí přesně stejně
jako v sh(1) (včetně všech možností uvozování a escape sekvencí), ale
kromě toho ještě poskytuje další výhody v tom, že prázdné znaky
obklopující '=' jsou ignorovány. Pokud se objeví jméno proměnné bez
koncového '=', bude tato proměnná zrušena. Jakýkoliv program uvedený
ve zpětných apostrofech procmail spustí a předá mu celou zprávu na
standardní vstup.
Komentáře
Slovo začínající znakem # a všechny následující znaky až do konce řádku
jsou ignorovány. Toto neplatí pro řádky obsahující podmínku, ty nemohou
být komentovány.
Předpisy
Řádek začínající znakem ':' označuje začátek předpisu. Má tento formát:
:0 [pznaky] [ : [lokln_zmek] ]
<jedna nebo více podmínek (jedna na řádek)>
<právě jeden akční řádek>
Podmínkový řádek začíná znakem `*'. Zbytek řádku kromě uvozujících a
koncových mezer je poslán znak po znaku na vstup vnitřního egrep-u.
Regulární výrazy vnitřního egrepu jsou naprosto kompatibilní s
rozšířenou syntaxí regulárních výrazů programu egrep(1). Viz též
Rozšířená syntaxe regulárních výrazů.
Mezi podmínkami v jednom předpisu platí logický součin (AND). Pokud
předpis neobsahuje žádnou podmínku, výsledek testu bude vždycky
pravdivý.
Pznak může být jeden z následujících znaků:
H Do programu egrep se pošle záhlaví zprávy (standard).
B Do egrepu se pošle tělo zprávy.
D Sdělí egrepu, že má rozlišovat malá a velká písmena (standard je
nerozlišovat).
A Tento předpis bude závislý na posledním předcházejícím předpisu
bez příznaku `A' nebo `a' (na aktuální úrovni vnoření). To vám
umožňuje řetězit akce, které závisí na společné podmínce.
a Má tentýž význam jako `A', ale bude zároveň záviset na spnm
dokončení předchozího předpisu.
E Tento předpis se provede pouze v případě, že bezprostředně
předcházející předpis nebyl proveden. Jeho úspěšné provedení
rovněž znemožní provedení bezprostředně následujících předpisů s
`E'. To vám umožňuje definovat akce typu `else if'.
e Předpis se provede pouze v případě, že bezprostředně předcházející
předpis selhal. To vám umožňuje definovat akce na zpracování
chyb.
h Záhlaví zprávy se pošle na vstup roury, do souboru nebo na místo
určení zprávy (default).
b Tělo zprávy se pošle na vstup roury, do souboru nebo na místo
určení zprávy (default).
f S rourou se má zacházet jako s filtrem.
c Vytvoř kopii zpracovávané zprávy. Tento příznak má význam pouze v
doruujcch předpisech. Jediný druh nedoručujícího předpisu v
němž dojde tento příznak smysluplného použití je blok (vnoření).
Aby mohla být zpracována kopie, příznak způsobí rozdvojení právě
běžícího procesu (zámky se nedědí), přičemž nový proces pokračuje
ve zpracování obvyklým způsobem, zatímco původní proces přeskočí
blok a pokračuje za ním.
w Čeká na ukončení spuštěného filtru nebo programu a otestuje
návratovou hodnotu (standardně ji ignoruje). Pokud bude filtr
neúspěšný, text nebude filtrován.
W Stejný význam jako příznak `w', ale potlačí hlášky `Program
failure'.
i Ignoruje chyby zápisu v tomto předpisu (obvykle nastávají při
předčasném uzavření roury).
r `Hrubý' režim (raw). Nepokouší se ujistit jestli zpráva končí
prázdným řádkem, zapíše ji tak jak je.
Můžete použít zvláštní podmínky, které nejsou přímo regulárními výrazy.
Takové podmínky musí začínat:
! Negace podmínky následující po vykřičníku.
$ Zbytek podmínky vyhodnotí podle pravidel pro substituci uvnitř
dvojitých uvozovek v sh(1) , přeskočí úvodní mezery a potom znovu
vyhodnotí.
? Použije exit kód uvedeného programu.
< Otestuje, zda je celková délka zprávy menší než uvedený počet
bajtů (decimálně).
> Obdobně jako '<'.
jméno_proměnné ??
Porovná zbytek podmínky s hodnotou této proměnné (nesmí se jednat
o pseudoproměnnou). Zvláštním případem jsou `B', `H', `HB' a `BH',
které pouze mění prohledávanou oblast záhlaví/těla zprávy,
definovanou pro aktuální předpis.
\ Použijte, chcete-li použít kterýkoliv z výše uvedených znaků na
začátku řádku v jeho normálním významu.
Lokální zámek
Pokud umístíte na konec prvního řádku předpisu druhou dvojtečku,
procmail použije lokln_zmek (pouze pro aktuální předpis). Volitelně
můžete za dvojtečku zadat jméno zámku, který chcete použít. Pokud tak
ovšem neučiníte, procmail použije jméno výstupního souboru (nebo jméno
za první '>>'), za které připojí hodnotu $LOCKEXT.
Akční řádek předpisu
Akční řádek může začínat jedním z následujících znaků:
! Pošle poštu (forward) na všechny následující e-mailové adresy.
| Spustí určený program; pokud je nalezen kterýkoliv znak z
$SHELLMETAS, pokusí se spustit program pomocí $SHELL-u.
Volitelně můžete před znak roury umístit promnn=, což způsobí,
že standardní výstup spuštěného programu bude uložen do promnn
prostředí (procmail v tomto místě neukončí zpracovávání
konfiguračního souboru). Pokud zadáte pouze znak roury bez
žádného názvu programu, procmail přesměruje obsah zprávy na
standardní výstup.
{ Následována alespoň jednou mezerou, tabulátorem nebo znakem nový
řádek označuje začátek vnořeného bloku. Všechno uvnitř bloku až
po následující uzavírající závorku bude záviset na podmínce
aktuálního předpisu. Počet úrovní vnoření není omezen.
Uzavírací závorka pouze ukončuje blok; v dnm ppad
nezpůsobuje ukončení procmailu. Když je dosaženo konce bloku,
zpracování pokračuje obvyklým způsobem za blokem. Ve vnořeném
bloku mají příznaky `B' a `H' vliv pouze na podmínky
předcházející tento blok, příznaky `h' a `b' nemají vůbec žádný
vliv.
Cokoliv jiného bude považováno za jméno poštovní schránky (buď jméno
souboru nebo adresáře, absolutní nebo relativní k aktuálnímu adresáři
(viz MAILDIR)). Pokud se jedná o jméno souboru (byť neexistujícího),
zpráva bude přidána na jeho konec.
Pokud se jedná o jméno adresáře, zpráva bude doručena do souboru se
zaručeně jedinečným názvem začínajícím $MSGPREFIX, nově vytvořeného v
tomto adresáři. Pokud název adresáře končí řetězcem "/.", předpokládá
se, že se jedná o složku systému MH a procmail použije další volné
číslo, které nalezne. Pokud jméno schránky končí na "/", je tento
adresář považován za složku maildir; tj. procmail doručí zprávu do
souboru v podadresáři pojmenovaném "tmp" a přejmenuje jej, aby byl v
podadresáři "new". Pokud je schránka určena jako složka MH nebo složka
maildir, procmail vytvoří potřebné adresáře, pokud neexistují; nebude
považovat schránku za neexistující jméno souboru. Pokud procmail
doručuje do adresáře, můžete zadat několik adresářů do nichž chcete
zprávu doručit (procmail k tomu používá hardlinky).
Implicitní hodnoty proměnných
LOGNAME, HOME a SHELL Vaše (příjemcovy) standardní hodnoty
PATH $HOME/bin:/bin:/usr/bin:/usr/local/bin
:/usr/bin/X11 (Výjimkou je doba zpracování
souboru /etc/procmailrc, kdy je nastavena na
`/bin:/usr/bin:/usr/local/bin:/usr/bin/X11'.)
SHELLMETAS &|<>~;?*[
SHELLFLAGS -c
ORGMAIL /var/spool/mail/$LOGNAME
(V případě, že bylo zadáno -m nedefinováno)
MAILDIR $HOME/
(Kromě případu, kdy jméno prvního úspěšně
otevřeného rc souboru začíná `./' nebo bylo
zadáno -m; tehdy je implicitní hodnota `.')
DEFAULT $ORGMAIL
MSGPREFIX msg.
SENDMAIL /usr/sbin/sendmail
SENDMAILFLAGS -oi
HOST Aktuální jméno počítače (hostname)
COMSAT no
(Pokud je jméno rc souboru určeno v příkazové
řádce)
PROCMAIL_VERSION 3.22
LOCKEXT .lock
Ostatní nulované nebo přednastavené proměnné jsou IFS, ENV a PWD.
Z bezpečnostních důvodů vymaže procmail při startu všechny proměnné,
které by které by mohly ovlivnit chování runtime linkeru.
Další proměnné
Dříve než vás zahltí množství proměnných, mějte na paměti, že všechny
mají rozumné implicitní hodnoty.
MAILDIR Aktuální adresář za běhu procmailu (což znamená, že všechny
cesty jsou relativní vzhledem k $MAILDIR).
DEFAULT Standardní soubor poštovní schránky (pokud není určeno
jinak, procmail uloží zprávu do této schránky). Před
zápisem do této schránky použije procmail automaticky
$DEFAULT$LOCKEXT jako zámek. Tuto proměnnou nemusíte
nastavovat, neboť již obsahuje implicitní systémovou
schránku.
LOGFILE Tento soubor bude obsahovat jakákoliv chybová nebo
diagnostická hlášení procmailu (za normálních okolností
žádná :-) příp. jiných programů spuštěných procmailem.
Jestliže tento soubor není definován, veškerá diagnostická
nebo chybová hlášení budou zaslána e-mailem odesilateli
zprávy. Viz též LOGABSTRACT.
VERBOSE Nastavením této proměnné na `yes' nebo `on' (ano, resp.
zapnout; pozn. překl.) případně `no' či `off' (ne,
vypnout) můžete zapínat respektive vypínat rozenou
diagnostiku.
LOGABSTRACT Těsně před svým ukončením zapíše procmail do souboru
$LOGFILE shrnutí zprávy: záhlaví `From:' a `Subject:', do
jaké složky (schránky) byla zpráva uložena a jaká byla její
délka v bajtech. Nastavením této proměnné na `no' se výpis
potlačí. Nastavením této proměnné na `all' (všechno) se
zajistí výpis pro každý úspěšně dokončený doruujc
pedpis.
LOG Cokoliv přiřazené této proměnné bude připojeno do souboru
$LOGFILE.
ORGMAIL Obvykle systémová schránka (ORiGinal MAILbox). Pokud z
nějakého tajemného důvodu (jako `filesystem full') nemůže
být zpráva doručena, tato schránka bude poslední možností.
Pokud se procmailu nepodaří zprávu uložit ani sem (móc, moc
špatný :-) vrátí zprávu odesílateli.
LOCKFILE Globální semafor. Pokud tento soubor již existuje, procmail
před dalším zpracováním počká až zmizí; potom jej sám
vytvoří (a samozřejmě také smaže, když skončí). Pokud je
specifikován více než jeden semafor bude ten předchozí
smazán dříve než se zkusí vytvořit nový. Užívání globálního
semaforu se nedoporučuje. Tam kde je to možné, použijte
místo toho lokální zámky (na bázi jednotlivých předpisů).
LOCKEXT Implicitní přípona, jejímž připojením ke jménu cílového
souboru se získá jméno loklnho zmku (pokud jsou zapnuty,
pro jednotlivé předpisy).
LOCKSLEEP Počet sekund, které procmail vyčká než opět zkusí zmek
(pokud již existoval); pokud není specifikováno, implicitní
hodnota je 8 sekund.
LOCKTIMEOUT Počet sekund, které musí uplynout od času poslední
modifikace/vytvoření zmku aby procmail usoudil, že se to
musí být soubor pozůstalý v důsledku chyby, který nyní může
být nuceně odstraněn. Pokud je nastavena nula, lhůta se
nepoužije a procmail bude čekat navždy dokud se soubor
neodstraní; pokud není specifikována žádná hodnota,
implicitně 1024 sekund. Tato proměnná se hodí proti
zacyklení sendmailu/procmailu. Procmail je imunní vůči
odchylkám hodin na různých počítačích.
TIMEOUT Počet sekund, které musí uplynout než procmail usoudí, že
některý z dceřiných procesů, které spustil, musel
zamrznout. Dotyčný program obdrží od procmailu signál
TERMINATE a zpracování konfiguračního souboru bude
pokračovat. Pokud je nula, lhůta se nepoužije a procmail
čeká dokud se neukončí dceřiný process; není-li hodnota
specifikována je implicitní hodnota 960 sekund.
MSGPREFIX Předpona souboru, pokud se zpráva doručuje do adresáře
(nepoužívá se při doručování do MH adresáře).
HOST Pokud toto není totožné se jménem počítače, které vrací
hostname, zpracování aktuálního konfiguranho souboru se
okamžitě ukončí. Pokud byly na příkazové řádce uvedeny
další konfigurační soubory, zpracování bude pokračovat
následujícím z nich. Pokud již byly všechny použity,
program se ukončí, ale nezpůsobí chybu (tzn. že poštovnímu
programu se bude zdát, že pošta byla doručena).
UMASK Jméno říká vše (pokud ne, zapomeňte na něj :-). Jakákoliv
hodnota přiřazená UMASK bude interpretována jako osmičkové
číslo. Není-li specifikováno, maska je implicitně 077.
Pokud maska dovoluje o+x, všechny schránky do nichž
procmail doručuje přímo prodělají změnu o+x. To se dá
použít ke kontrole zda přišla nová pošta.
SHELLMETAS Pokud se kterýkoliv ze znaků řetězce SHELLMETAS objeví v
řádku obsahujícím filtr nebo program, řádek bude poslán do
$SHELL namísto přímého spuštění.
SHELLFLAGS Jakékoliv volání $SHELL-u bude uskutečněno ve tvaru
"$SHELL" "$SHELLFLAGS" "$*";
SENDMAIL Pokud nepoužíváte pesmrovn (forwarding), nelamte si s
tímhle hlavu. Určuje program, který bude forwardovat
jakoukoliv poštu.
Volá se jako: "$SENDMAIL" $SENDMAILFLAGS "$@";
NORESRETRY Počet opakovaných pokusů pokud nastane některá z chyb
`process table full' (zaplnění tabulky procesů), `file
table full' (zaplnění tabulky souborů), `out of memory'
(nedostatek paměti) nebo `out of swap space' (zaplnění
odkládacího prostoru). Pokud je toto číslo záporné,
procmail to bude zkoušet donekonečna; pokud není
specifikováno, implicitní hodnota je 4. Další pokusy o
opakování akce nastávají v intervalu $SUSPEND sekund.
Myšlenka tohoto uspořádání spočívá v tom, že pokud je např.
vyčerpán swapovac prostor nebo se zaplnila tabulka
proces, obvykle to zjistí několik dalších programů, které
buď skončí nebo zkolabují, čímž uvolní nedostávající se
systémové zdroje procmailu.
SUSPEND Čas v sekundách kdy bude procmail čekat na něco co
momentálně není k dispozici (paměť, fork, atd.); není-li
specifikováno, implicitní hodnota je 16 sekund. Viz též:
LOCKSLEEP.
LINEBUF Délka interní řádkové vyrovnávací paměti. Nelze nastavit
menší než 128. Délka žádného řádku v konfiguranm souboru
by neměla překročit $LINEBUF znaků před ani po provedení
substitucí. Pokud není specifikováno, standard je 2048.
Toto omezení samozřejmě neplat na zprávu samotnou; ta může
mít libovolné délky řádků nebo může být i binárním
souborem. Viz též PROCMAIL_OVERFLOW.
DELIVERED Pokud je nastavena na `yes', procmail bude předstírat
(MTA), že zpráva byla doručena. Pokud při takovém nastavení
nelze zprávu doručit, zpráva bude navždy ztracena (nebude
odeslána na postmastera apod.).
TRAP Při ukončení procmailu (neplatí, pokud bylo způsobeno
přijatým signálem) se provede obsah této proměnné. Kopie
zprávy je k dispozici na standardním vstupu. Jakýkoliv
výstup vytvořený tímto příkazem bude připojen do souboru
$LOGFILE. Možná použití TRAP-u: odstranění dočasných
souborů, na míru šité výtahy zpráv, atd. Viz též: EXITCODE
a LOGABSTRACT.
EXITCODE Implicitně je návratová hodnota procmailu nula (úspěch),
pokud úspěšně doručil zprávu nebo byla proměnná HOST špatně
nastavena a na příkazové řádce nebyly žádné další
konfigurační soubory; jinak je vráceno selhání. Ještě
předtím ale procmail prozkoumá hodnotu této proměnné. Pokud
byla této proměnné přiřazena kladná hodnota, použije se
jako návratová hodnota při ukončení procmailu. Pokud je
tato proměnná nastavena, ale prázdná, procmail použije
návratovou hodnotu vrácenou programem TRAP Pokud tato
proměnná není nastavena, procmail ji nastaví krátce před
vyvoláním programu TRAP.
LASTFOLDER Tuto proměnnou nastaví procmail, kdykoliv doručí nějakou
zprávu do složky nebo do programu. Vždy obsahuje jméno
souboru (nebo programu) kam procmail doručil zprávu. Pokud
byla zpráva doručena do více složek najednou, bude
$LASTFOLDER obsahovat hardlinkovaná jména souborů oddělěná
mezerami.
MATCH Procmail přiřadí této proměnné hodnotu, kdykoliv má uložit
text z úspěšně porovnaného regulárního výrazu. Obsahuje
veškerý text vyhovující regulárnímu výrazu za speciálním
znakem `\/'.
SHIFT Přiřazení kladné hodnoty této proměnné má stejný efekt jako
příkaz `shift' v sh(1). Tento příkaz má největší využití
při získání dalších argumentů předaných procmailu, když je
použit jako generický filtr e-mailových zpráv.
INCLUDERC Jméno konfiguračního souboru (relativní vzhledem k
aktuálnímu adresáři), který bude zařazen do zpracování,
jako by byl součástí aktuálního konfiguračního souboru.
Vnořování je povoleno a je limitováno pouze systémovými
zdroji (paměť a deskriptory souborů). Protože nejsou
prováděny žádné kontroly přístupových práv nebo vlastníka
konfiguračního souboru, měli by se uživatelé INCLUDERC
ujistit, že právo zapisovat do něj nebo do jeho adresáře
mají jen důvěryhodní uživatelé. Přiřazení INCLUDERC na
příkazové řádce nemá žádný efekt.
SWITCHRC Určuje konfigurační soubor (relativně k aktuálnímu
adresáři), na který se při zpracovávání přejde. Pokud tento
soubor neexistuje nebo se nejedná o normální soubor či
/dev/null, zapíše se do logu chyba a zpracovávání bude
pokračovat v aktuálním konfiguračním souboru. V opačném
případě se zpracovávání aktuálního konfiguračního souboru
ukončí a začne se s určeným konfiguračním souborem.
Odnastavení (unsetting) SWITCHRC způsobí ukončení
zpracovávání aktuálního konfiguračního souboru, jako kdyby
normálně skončil. Stejně jako u INCLUDERC se ani zde
neprovádí žádné kontroly přístupových práv a vlastníka
konfiguračního souboru a přiřazení na příkazové řádce
nemají žádný vliv.
PROCMAIL_VERSION
Číslo verze spuštěného programu procmail.
PROCMAIL_OVERFLOW
Tato proměnná bude nastavena na neprázdnou hodnotu pokud
procmail zjistí přetečení bufferu. Viz sekce CHYBY, kde je
uvedeno více o chování při výskytu přetečení.
COMSAT Implicitně je notifikace Comsat(8)/biff(1) zapnutá. Dá se
vypnout nastavením této proměnné na `no'. Alternativně lze
službu biff upravit nastavením této proměnné buď na
`služba@', `@hostname' nebo `služba@hostname'. Není-li
specifikováno, použije se biff@localhost.
DROPPRIVS Nastaví-li se na `yes', procmail `shodí' všechna práva,
kterých eventuálně mohl nabýt (suid, sgid). Toto se hodí
pouze v případě, že chcete, aby se zbylá část souboru
/etc/procmailrc provedla jménem příjemce.
Rozšířené regulární výrazy
Následující speciální konstrukce používá jak interní egrep v procmailu,
tak standardní egrep(1):
^ Začátek řádku.
$ Konec řádku.
. Jakýkoliv znak kromě konce řádku.
a* Posloupnost libovolného, i nulového počtu áček.
a+ Posloupnost jednoho nebo více áček.
a? Jedno nebo žádné a.
[^-a-d] Jakýkoliv znak, který není pomlčka, a, b, c, d nebo konec
řádku.
de|abc Buď posloupnost `de' nebo `abc'.
(abc)* Žádný výskyt nebo libovolný počet opakování posloupnosti
`abc'.
\. Jediná tečka; \ se používá k uvození všech znaků se zvláštním
významem. Viz také použití $\ u proměnných.
Tohle byly samozřejmě pouze příklady. Jakákoliv složitější kombinace je
rovněž přípustná.
Následující speciální konstrukce používá specifická rozšíření
procmailu:
^ nebo $ Odpovídá novému řádku (u víceřádkových porovnání).
^^ Zakotví výraz na úplném začátku porovnávané oblasti, resp. na
jejím úplném konci je-li tato kombinace nalezena na konci
výrazu.
\< nebo \>
Porovnání se shoduje se znakem před anebo za slovem. Tyto
speciální výrazy jsou pouhým synonymem pro `[^a-zA-Z0-9_]',
ale shoda nastane i pro znak `nový řádek'. Jelikož tyto
symboly se shodují se skutečnými znaky, lze je použít pouze k
oddělení slov, nikoli pro odlišení mezer mezi slovy.
\/ Rozděluje výraz na dvě části. Všechno co se shoduje v pravé
části se přiřadí proměnné MATCH.
PŘÍKLADY
Viz manuálová stránka procmailex(5).
VAROVÁNÍ
Akční řádek, který pokračuje na dalším řádku musí vždycky končit
obráceným lomítkem, dokonce ani kdyby spouštěný shell nepotřeboval nebo
nechtěl, aby obrácené lomítko takový řádek označovalo. Důvod spočívá v
dvoufázovém procesu analýzy řádku (nejdřív procmail, potom shell (nebo
také ne, v závislosti na SHELLMETAS)).
Nedávejte na podmínkové řádky s regulárními výrazy žádné komentáře,
protože celý řádek je kompletn předán internímu egrepu (kromě
pokračovacích obrácených lomítek na konci řádku).
Úvodní mezera na řádku na němž pokračuje regulární výraz je obvykle
ignorována (takže můžete pokračování odsadit), ale nikoliv na
pokračovacích podmínkových řádcích, které jsou vyhodnocovány podle
pravidel sh(1) pro substituce uvnitř dvojitých závorek.
Dávejte si pozor na zacyklení při provádění nezdravých věcí, jako třeba
odeslání zprávy (forward) na svůj vlastní účet. Zacyklení může být
přerušeno správným použitím LOCKTIMEOUT.
Jakékoliv implicitní (standardní) hodnoty, které má procmail pro
některé proměnné vždycky přepíší už definované hodnoty. Pokud chcete
implicitní hodnoty s jistotou změnit, musíte nové hodnoty definovat v
konfiguračním souboru, nebo jako parametr na příkazovém řádku.
Soubor /etc/procmailrc nemůže změnit nastavení PATH v uživatelských
konfiguračních souborech, protože když procmail projde soubor
/etc/procmailrc, je tato hodnota je resetována. I když v této oblasti
dojde v budoucnu ke zlepšení, jediným správným řešením je v současné
době překompilování procmailu s požadovanou hodnotou.
Proměnné nastavené uvnitř akce typu `|' spouštěné shellem si
nezachovávají své hodnoty po ukončení předpisu jelikož jsou nastaveny v
podřízeném shellu spuštěném procmailem. Chcete-li mít jistotu, že si
proměnná podrží svou hodnotu, musíte provést přiřazení ještě před
uvozujícím `|' předpisu.
Pokud definujete v doručujícím předpisu příznak `h' nebo `b' a dojde ke
shodě podmínky, pak, pokud jste nedefinovali zároveň příznak `c', tělo
zprávy resp. záhlaví bude bez varování ztraceno.
DALŠÍ INFORMACE
procmail(1), procmailsc(5), procmailex(5), sh(1), csh(1), mail(1),
mailx(1), binmail(1), uucp(1), aliases(5), sendmail(8), egrep(1),
regexp(5), grep(1), biff(1), comsat(8), lockfile(1), formail(1)
CHYBY
Procmail je schopen sám o sobě provádět substituce proměnných pouze
tohoto typu: $jméno, ${jméno}, ${jméno:-text}, ${jméno:+text},
${jméno-text}, ${jméno+text}, $\jméno, $#, $n, $$, $?, $_, $- a $=;
přičemž za $\name bude dosazen ekvivalent $jméno bez speciálních
významů zvláštních znaků; za $_ bude dosazeno jméno aktuálního
konfiguračního souboru, za $- $LASTFOLDER a $= bude obsahovat výsledek
posledního předpisu. Výsledek substituce $\jméno navíc nebude rozdělen
podle prázdných znaků. Když jsou použity volby -a nebo -m za $# se
dosadí počet parametrů a za "$@" (uvozovky jsou povinné) se dosadí
příslušné parametry. Ovšem pouze je-li předáván v seznamu parametrů
nějakému programu a v tom případě je substituován pouze jeden výskyt
"$@".
Substituce proměnných neohraničené uvozovkami jsou vždycky rozděleny
podle mozer, tabulátorů a znaků konce řádku; proměnná IFS se interně
nepoužívá.
Procmail nepodporuje substituci `~'.
Při zpracovávání konfiguranho souboru se používá řádková vyrovnávací
paměť (řádkový buffer) o délce $LINEBUF. Jakékoliv rozšíření
zpracovávaného řádku při substitucích nad tento limit bude oříznuto a
bude nastavena proměnná PROCMAIL_OVERFLOW. Pokud je řádek, na kterém
došlo k přetečení podmínkový nebo akční řádek, bude vyhodnocen jako
selhání a procmail bude pokračovat ve zpracovávání. Pokud je to
přiřazení proměnné nebo počáteční řádek předpisu, ukončí procmail
zpracovávání konfiguračního souboru.
Pokud má globální semafor (zámek) relativn cestu, a aktuální adresář
není ten, v němž byl semafor vytvořen, potom semafor nebude odstraněn,
pokud procmail v tomto místě skončí (řešení: pro globální semafor
používejte absolutn cestu).
Pokud má konfigurační soubor relativn cestu a v okamžiku jeho prvního
otevření obsahuje MAILDIR relativní cestu a pokud je procmail přinucen
rozdvojit se a aktuální adresář byl změněn od doby, kdy byl
konfigurační soubor otevřen, nebude se procmail moci rozdvojit (řešení:
použít absolutn cestu k určení konfiguračního souboru nebo zajistit,
aby MAILDIR obsahoval absolutní cestu, když je konfigurační soubor
otevírán).
Lokální semafor v předpisu, který otevírá neforkující vnořený blok
nebude fungovat tak, jak čekáte.
Při uložení obsahu standardního výstupu předpisu do proměnné bude
odstraněn právě jeden koncový znak `nový řádek'.
Nekteré nevhodné a nejasné regulární výrazy způsobí nastavení MATCH na
nesprávnou hodnotu. Regulární výraz může být opraven odstraněním
jednoho nebo více nepotřebných operátorů '*', '+', nebo '?' na levé
straně speciální konstrukce \/ .
RŮZNÉ
Pokud regulární výraz obsahuje `^TO_', bude tento řetězec nahrazen
výrazem `(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope
|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)', což by mělo zachytit
všechny možné specifikace adresáta obsahující určitou adresu.
Pokud regulární výraz obsahuje `^TO', bude tento řetězec nahrazen
výrazem `(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope
|Apparently(-Resent)?)-To):(.*[^a-zA-Z])?)', což by mělo zachytit
všechny možné specifikace adresáta obsahující určité slovo.
Pokud regulární výraz obsahuje `^FROM_DAEMON', bude to nahrazeno
výrazem `(^(Mailing-List:|Precedence:.*(junk|bulk|list)|To: Multiple
recipients of |(((Resent-)?(From|Sender)|X-Envelope-From):|>?From
)([^>]*[^(.%@a-z0-9])?(Post(ma?(st(e?r)?|n)|office)|(send)?Mail(er)?
|daemon|m(mdf|ajordomo)|n?uucp|LIST(SERV|proc)|NETSERV|o(wner|ps)
|r(e(quest|sponse)|oot)|b(ounce|bs\.smtp)|echo|mirror|s(erv(ices?|er)
|mtp(error)?|ystem)|A(dmin(istrator)?|MMGR|utoanswer))(([^).!
:a-z0-9][-_a-z0-9]*)?[%@>\t ][^<)]*(\(.*\).*)?)?$([^>]|$)))', což by
mělo zachytit zprávy odeslané většinou démonů.
Pokud regulární výraz obsahuje `^FROM_MAILER', bude to nahrazeno
výrazem `(^(((Resent-)?(From|Sender)|X-Envelope-From):|>?From
)([^>]*[^(.%@a-z0-9])?(Post(ma(st(er)?|n)|office)|(send)?Mail(er)?
|daemon|mmdf|n?uucp|ops|r(esponse|oot)|(bbs\.)?smtp(error)?|s(erv(ices?
|er)|ystem)|A(dmin(istrator)?|MMGR))(([^).!:a-z0-9][-_a-z0-9]*)?[%@>\t
][^<)]*(\(.*\).*)?)?$([^>]|$))' (ořezaná verze `^FROM_DAEMON'), což by
mělo zachytit zprávy od většiny poštovních démonů.
Pro přiřazení logických hodnot proměnným jako VERBOSE, DELIVERED nebo
COMSAT procmail akceptuje jako logickou jedničku každý řetězec, který
začíná: nenulovou hodnotou, slovem `on', `y', `t' nebo `e'. Nepravda
(logická 0) je jakýkoliv řetězec začínající nulovou hodnotou, `off',
`n', `f' nebo `d'.
Pokud akční řádek předpisu specifikuje program, pak řádek skládající se
z pouhé dvojice zpětné lomítko-nový řádek na jinak prázdném řádku bude
převeden na znak nový řádek.
Zpracování regulárních výrazů, zabudované v procmailu, nepodporuje
pojmenované třídy znaků (named character classes).
POZNÁMKY
Jelikož v konfiguračním souboru se všeobecně ignorují úvodní bílé znaky
bez uvozovek, můžete je využít zcela dle své chuti k odsazování textu.
Úvodní `|' na začátku akčního řádku, které specifikuje program nebo
filtr se odřeže ještě před testováním řádku na přítomnost $SHELLMETAS.
Soubory zahrnuté direktivou INCLUDERC a obsahující pouze přiřazení do
proměnných mohou být sdíleny s sh.
Současné chování přiřazení INCLUDERC a SWITCHRC na příkazovém řádku
nemůže být zaručeno. V minulosti se již změnilo a v dalších verzích
může být změněno znovu nebo úplně vypuštěno.
Chcete-li opravdu komplikované zpracování, můžete zvážit dokonce
rekurzivní volání procmailu.
AUTOŘI
Stephen R. van den Berg
<srb@cuci.nl>
Philip A. Guenther
<guenther@sendmail.com>