Scroll to navigation

PROCMAILRC(5) File Formats Manual PROCMAILRC(5)

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 doručujícím předpisu, procmail považuje zprávu (ano, uhádli jste) za doručenou a ukončí zpracování konfiguračního souboru po úspěšném provedení akčního řádku předpisu. Pokud je nalezena shoda v nedoručujícím předpisu zpracování bude pokračovat 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 doručující předpis 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 [příznaky] [ : [lokální_zámek] ] <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ý.

Příznak může být jeden z následujících znaků:

Do programu egrep se pošle záhlaví zprávy (standard).
[přibližně] Do egrepu se pošle tělo zprávy.
Sdělí egrepu, že má rozlišovat malá a velká písmena (standard je nerozlišovat).
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.
Má tentýž význam jako `A', ale bude zároveň záviset na úspěšném dokončení předchozího předpisu.
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'.
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.
Záhlaví zprávy se pošle na vstup roury, do souboru nebo na místo určení zprávy (default).
Tělo zprávy se pošle na vstup roury, do souboru nebo na místo určení zprávy (default).
S rourou se má zacházet jako s filtrem.
Vytvoř kopii zpracovávané zprávy. Tento příznak má význam pouze v doručujících 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.
Č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.
Stejný význam jako příznak `w', ale potlačí hlášky `Program failure'.
Ignoruje chyby zápisu v tomto předpisu (obvykle nastávají při předčasném uzavření roury).
`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 návratový kód uvedeného programu.
<
Otestuje, zda je celková délka zprávy menší než uvedený počet bajtů (decimálně).
>
Obdobně jako '<'.
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 lokální_zámek (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 proměnná=, což způsobí, že standardní výstup spuštěného programu bude uložen do proměnné 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 žádném případě 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

Vaše (příjemcovy) standardní hodnoty
$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'.)
& |<>~;?*[
-c
/var/spool/mail/$LOGNAME
(V případě, že bylo zadáno -m nedefinováno)
$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 `.')
$ORGMAIL
msg.
/bin/mail

Aktuální jméno počítače (hostname)
no
(Pokud je jméno rc souboru určeno v příkazové řádce)
3.22
.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.

PROSTŘEDÍ

Dříve než vás zahltí množství proměnných, mějte na paměti, že všechny mají rozumné implicitní hodnoty.

Aktuální adresář za běhu procmailu (což znamená, že všechny cesty jsou relativní vzhledem k $MAILDIR).
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.
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.
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 rozšířenou diagnostiku.
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ý doručující předpis.
Cokoliv přiřazené této proměnné bude připojeno do souboru $LOGFILE.
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.
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ů).
Implicitní přípona, jejímž připojením ke jménu cílového souboru se získá jméno lokálního zámku (pokud jsou zapnuty, pro jednotlivé předpisy).
Počet sekund, které procmail vyčká než opět zkusí zámek (pokud již existoval); pokud není specifikováno, implicitní hodnota je 8 sekund.
Počet sekund, které musí uplynout od času poslední modifikace/vytvoření zámku 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.
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.
Předpona souboru, pokud se zpráva doručuje do adresáře (nepoužívá se při doručování do MH adresáře).
Pokud toto není totožné se jménem počítače, které vrací hostname, zpracování aktuálního konfiguračního 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).
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.
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í.
Jakékoliv volání $SHELL-u bude uskutečněno ve tvaru
"$SHELL" "$SHELLFLAGS" "$*";
Pokud nepoužíváte přesměrování (forwarding), nelamte si s tímhle hlavu. Určuje program, který bude forwardovat jakoukoliv poštu.
Volá se jako: "$SENDMAIL" $SENDMAILFLAGS "$@";
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.
Č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.
Délka interní řádkové vyrovnávací paměti. Nelze nastavit menší než 128. Délka žádného řádku v konfiguračním 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.
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.).
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.
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.
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.
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 `\/'.
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.
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.
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.
Číslo verze spuštěného programu procmail.
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í.
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.
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.
Posloupnost libovolného, i nulového počtu áček.
Posloupnost jednoho nebo více áček.
Jedno nebo žádné a.
[^-a-d]
Jakýkoliv znak, který není pomlčka, a, b, c, d nebo konec řádku.
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).

NÁSTRAHY

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

[přibližně] 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í konfiguračního 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 [přibližně] `(^(Mailing-List : |Precedence 'u' :.*(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 'u' |proc) |NETSERV |o(wner |ps) |r(e(quest |sponse) |oot) |b(ounce 'u' |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ů.

[přibližně] Pokud regulární výraz obsahuje `^FROM_MAILER', bude to nahrazeno výrazem [přibližně] `(^(((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ů.

[přibližně] 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.

Za starých časů muselo být ':0' značící začátek nového předpisu změněno na
':n', kde 'n' představuje počet podmínek, které následují.

AUTOŘI

Stephen R. van den Berg

<srb@cuci.nl>

Philip A. Guenther

<guenther@sendmail.com>

2001/08/04 BuGless