Nejdříve bych rád řekl pár slov o tom, k čemu vlastně programy, jako procmail a maildrop slouží. Pokud se tedy v této oblasti cítíte dostatečně kovaní, následující odstavec klidně přeskočte.
Oba programy jsou takzvaní MDA – Mail Delivery Agents – a jejich úkolem je doručování emailů. V praxi to vypadá tak, že email obdrží MTA (Mail Transfer Agent – například sendmail) a ten se podle několika údajů (nastavení DNS, konfigurace SMTP a domény adresáta) rozhoduje, zda jde o email k lokálnímu doručení či k předání dál. Pakliže jde o email pro lokální doručení, přichází ke slovu MDA. Ten může být v podstatě velice primitivní a pouze umístit email do předem určeného mailboxu podle adresáta a nebo naopak může být mocným nástrojem pro filtrování příchozích zpráv. A právě do této druhé skupiny patří procmail i maildrop.
Jak jsem již předeslal, používám maildrop a teď je čas říct si proč. Osobně jsem měl hlavně tři důvody (řazeno podle důležitosti):
- procmail při doručování načítá kompletně celou zprávu do operační paměti
- definice pravidel pro maildrop je podle mého názoru přehlednější a snad i flexibilnější
- procmail nedokáže bez dodatečných patchů doručovat poštu do schránek ve formátu Maildir (tato skutečnost je v mém pomyslném žebříčku na nejméně důležitém postu proto, že jsme se zatím k přechodu na Maildir nedostali; jakmile k tomu dojde, nabude samozřejmě na důležitosti)
Načítání celého emailu do paměti je vlastnost, za kterou by měli být autoři procmailu odsouzeni k veřejně prospěšným pracím :). Těžko říci, co je k tomu vedlo (snad rychlost?), ale v praxi to znamená, že pár větších emailů může server pěkně potrápit a třeba i shodit. Samotnému se mi to kdysi stalo, když jsem jako administrátor-zelenáč neomezil maximální velikost příchozího emailu a 100-megabajtová zpráva poslala server do věčných lovišť. Vzhledem k tomu, že objemy přenášených zpráv stále rostou a v emailech stále častěji najdete obrázky či dokonce videosekvence (jednou jsem dostal 19 MB velkou pozvánku na tiskovku – byl to M$ Word DOC se třemi řádky textu a zbytek tvořila mapa :), jsou obavy z chování procmailu opodstatněné, zvláště když si uvědomíme, že běžné servery na platformě Intel často umožňují osadit pouze 256 či 384 MB paměti.
A nyní se již podívejme na rozdíly v definicích filtrovacích pravidel obou programu. Na první pohled je jasné, že maildrop vychází z běžné koncepce programovacích jazyků, zatímco procmail razí vlastní cestu, syntaxe jeho konfiguračních souborů mi nepřipomíná naprosto nic. Pravda, to by ještě nemuselo nic znamenat, ale to by museli autoři procmailu ten svůj „jazyk“ navrhnout tak, aby byl srozumitelný a intuitivní, a to myslím není. Posuďte sami, následující příklad zajistí ukládání zpráv z adresy pepa@nekde.cz do složky od_pepy:
procmail | maildrop |
---|---|
:0: * ^From:.*pepa@nekde.cz od_pepy |
if (/^From:.*pepa@nekde.cz/) to od_pepy |
A bude hůř, jak říká klasik :). Teď si uvedený příklad rozšíříme. Nejenom že chceme mít všechny maily od Pepy ve zvláštní složce, ale také by se hodilo, kdyby se automaticky poslaly Frantovi:
procmail | maildrop |
---|---|
:0 c * ^From.*pepa@nekde.cz ! franta@nekde.cz :0 A od_pepy |
if (/^From:*pepa@nekde.cz/) { cc "!franta@nekde.cz" to od_pepy } |
Rozšíření pravidla pro procmail znamenalo změnu prvního řádku (je třeba programu říct, že budeme dělat kopii), přidat akci pro odeslání kopie (všimněme si, že maildrop a procmail mají i společné prvky, například znak ! uvozuje emailovou adresu) a nakonec přidat uvození dalšího pravidla, tentokrát s příznakem A („:0 A“), který značí, že pravidlo náleží k tomu předchozímu a tím pádem přebírá i jeho podmínku.
To by myslím jako demonstrace stačilo a domnívám se, že pokud nejste zrovna procmailový fanatik, musíte uznat, že jazyk maildropu je přehlednější a hlavně snáze pochopitelný. Moje zkušenost je navíc taková, že když si někdo nadefinuje komplexnější procmailová pravidla, tak se v nich jenom těžko orientuje kdokoliv jiný. Ačkoliv to není vyloučené ani s maildropem, řekl bych, že šance pochopit cizí úmysl je zde výrazně vyšší.
Z hlediska možností a funkcí jsou na tom oba programy v podstatě velice podobně. Následuje krátký přehled těch nejpoužívanějších s jednoduchou ukázkou pro oba programy.
funkce | procmail | maildrop |
---|---|---|
Doručení zprávy externím programem |
| /cesta/k/programu | to „|/cesta/k/programu“
nebo cc „|/cesta/k/programu“ |
Filtrování zprávy externím programem |
dtto, ale začátek pravidla |
xfilter „/cesta/k/programu“ |
Filtrování zpráv podle rozměru |
:0 |
if ($SIZE > 10000000) to zpravy_nad_10MB nebo if ($LINES > 500) |
Přeformátování zpráv (např. přidání hlavičky) | externí program formail:
:0 f | formail -A"Message-ID:" |
externí program reformail:
xfilter „reformail \ -A'X-Envelope-From: $FROM'“ maildrop obsahuje také program reformime, který umožňuje pracovat s MIME zprávami |
Myslím, že na uvedených příkladech je vidět, že maildrop, aniž by mu to ubralo na funkčnosti, nabízí přehlednější způsob definice filtrovacích pravidel. Aby bylo jasno, nevolám po jednoduchých řešení za každou cenu, ale volám po tom, aby program měl již v prvotním návrhu promyšleny klíčové prvky tak, aby zbytečně nekomplikoval život uživatelům. A třeba si mě ukamenujte, ale já si nemyslím, že by se tím autoři procmailu (ale i některých jiných programů) řídili. Možná, že tím sledovali něco, co dnes už ztratilo na významu (nebo se to přede mnou dovedně skrývá :). Ať tak či onak, řekl bych, že maildrop pěkně ukazuje, že to jde i jinak, aniž by bylo třeba děla kompromisy. A když k tomu navíc i odstraňuje zmiňovaný problém s načítáním emailu do paměti, nevidím mnoho důvodů, proč u procmailu zůstávat. Snad jedině velké množství již hotových pravidel a nechuť je předělávat pro maildrop, ale na druhou stranu, stojí vám zato to riskovat?