PROCMAILRC(5) | File Formats Manual | PROCMAILRC(5) |
procmailrc - konfigurační soubor programu procmail
$HOME/.procmailrc
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.
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.
Řá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ů:
Můžete použít
zvláštní podmínky, které nejsou
přímo regulárními výrazy. Takové
podmínky musí začínat:
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 může
začínat jedním z následujících
znaků:
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).
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.
Dříve než vás zahltí
množství proměnných, mějte na
paměti, že všechny mají rozumné
implicitní hodnoty.
The following tokens are known to both the procmail internal egrep
and the standard egrep(1) (beware that some egrep implementations
include other non-standard extensions; in particular, the repetition
operator { is not supported by procmail's egrep):
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:
Viz manuálová stránka procmailex(5).
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.
procmail(1), procmailsc(5), procmailex(5), sh(1), csh(1), mail(1), mailx(1), uucp(1), aliases(5), sendmail(8), egrep(1), regexp(5), grep(1), biff(1), comsat(8), lockfile(1), formail(1)
[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'.
Some non-optimal and non-obvious regexps set MATCH to an incorrect
value. The regexp can be made to work by removing one or more unneeded '*',
'+', or '?' operators on the left-hand side of the \/ token.
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 :.*(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ů.
[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).
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í.
Stephen R. van den Berg
<srb@cuci.nl>
Překlad této příručky do španělštiny vytvořili Jindřich Vavruška <netplus@comp.cz> a Pavel Heimlich <tropikhajma@gmail.com>
Tento překlad je bezplatná dokumentace; Přečtěte si GNU General Public License Version 3 nebo novější ohledně podmínek autorských práv. Neexistuje ŽÁDNÁ ODPOVĚDNOST.
Pokud narazíte na nějaké chyby v překladu této příručky, pošlete e-mail na adresu translation-team-cs@lists.sourceforge.net.
BuGless |