Co je procmail?
Procmail slouží na zpracování příchozí pošty. Na FI není nutné na
jeho fungování volání pomocí souboru .forward
, ale stačí existence
konfiguračního souboru .procmailrc
. Program procmail se spustí pro
každou zprávu a dle pravidel, které najde v uvedeném konfiguračním
souboru, vykoná akci příslušící danému pravidlu. Umí například zprávu
uložit do zadaného mailboxu nebo poslat zprávu externímu programu.
.procmailrc
Soubor .procmailrc
se musí nacházet v domovském adresáři. Skládá se
z pravidel, která mají dvě části. První část popisuje zprávu, pro kterou se
má dané pravidlo uplatnit, a druhá je samotná akce – tedy co dělat se
zprávou, která pravidlu vyhovuje. Například:
:0
* ^From.*adam
adambox
Toto pravidlo uloží každou zprávu přicházející z adresy, která obsahuje
podřetězec adam
, do mailboxu adambox
. Všechny cesty jsou relativní
k adresáři nastavenému v proměnné MAILBOX
(na FI domovský adresář).
Chcete-li číst poštu přes IMAP, který na FI hledá mailboxy v adresáři
~/mail/
, přidejte na začátek souboru .procmailrc
řádek
MAILDIR=$HOME/mail
Pravidlo vždy začíná řádkem, kde prvním znakem je ":" a za ním
následuje seznam příznaků, které popisují zpracování zprávy, tedy
například zda se má kromě hlaviček kontrolovat i tělo zprávy, zda se má
zpráva po zpracování akcí přeposlat dalším pravidlům a podobně
(detaily viz manuálová stránka procmailrc
).
V uvedeném příkladě tedy první řádek začíná pravidlo. (Číslo 0 je
historický pozůstatek a nemá žádnou funkci, ale je součástí začátku
pravidla a je třeba je tam ponechat.) Neuvedení žádných příznaků znamená, že
očekáváme výchozí funkčnost (z toho je nejdůležitější to, že se
kontrolují jenom hlavičky zprávy, a ne tělo). Druhý řádek je podmínka, která
popisuje, pro které zprávy pravidlo platí. Každá podmínka se nachází na
jednom řádku, začíná znakem "*" a všechno za ním je interpretováno
jako regulární výraz (POSIX 1003.2 RE) kompatibilní s rozšířenými
regulárními výrazy programu egrep (viz manuálová stránka egrep
a
regex
). A konečně třetí řádek je akce. Akce je vždy jeden řádek na
konci pravidla. V tomto případě to znamená, že zpráva se uloží do
mailboxu adambox
.
Modifikace předchozího jednoduchého příkladu je pravidlo pro
procmail, které všechnu přicházející poštu uloží do mailboxu myspool
:
:0
myspool
Komplikovanější příklad:
:0 c
* ^From.*peter
* ^Subject:.*compilers
! william@example.com
:0
* ^Subject:.*perl compilers
perlcomp
Tento příklad má dvě pravidla. Na řádku 1 se nachází příznak "c", který
říká, že zpráva neskončí u tohoto pravidla, ale její kopie se pošle na
další zpracování. Pravidlo tedy pro všechny zprávy od uživatele adam
s předmětem, který obsahuje podřetězec "compilers", vykoná akci na řádku
4, což znamená přeposlání zprávy na adresu william@example.com
. Druhé
pravidlo uloží všechny zprávy týkající se překladačů Perlu do mailboxu
perlcomp
.
Přeposílání (forwarding) e-mailů pomocí Procmailu
Procmail nám umožňuje nastavit stejné přeposílání e-mailů jako soubor
.forward
, tedy se zachováním obálkové adresy odesílatele. Příklad
nastavení viz níže. Pozor: v uvedených hranatých závorkách jsou vždycky
dva bílé znaky: mezera a tabulátor. Řetězec Xuzivatel
nahraďte svým
loginem, např. Xnovak29
.
:0
* !^X-FI-Xuzivatel-Loop
{
:0fw
| formail -a 'X-FI-Xuzivatel-Loop: loop prevention'
:0
* ^Return-Path:[ ]*\/[^ ].+
{ env=$MATCH }
:0
! ${env+-f "$env"} honza.uzivatel@example.com
}
Ve fakultním prostředí je hlavní rozdíl oproti použití .forward
v tom,
že se před přeposláním uplatní všechna nastavení Procmailu, například
spamový filtr
nebo automatická odpověď na e-mail
v nepřítomnosti.
Odstraňování obrázků log z mailů
Pokud čtete poštu v její textové verzi, můžou vás rušit podpisy nebo loga, které se zobrazují jako příloha u HTML zpráv, i když nejde o přílohu, které byste měli věnovat pozornost. Pokud jde o vždy opakující se obrázky, na jejich odstraňování můžete využít náš skript.
Podmínkou je, že poštu přijímáte na serveru Anxur (lze ověřit ve Fakultní administrativě).
Do svého .procmailrc
přidejte tyto řádky:
:0fW
| /usr/local/libexec/image-attachment-filter.pl
Pak je třeba vytvořit soubor ~/.image-attachment-filter.cfg
, kam umístíte
SHA-256 hashe příloh, které chcete smazat (za hashem může být komentář),
třeba takto:
$ cat ~/.image-attachment-filter.cfg
1373b8627155d238a9856e3342961f1946858932086f7a2565b483b1959e14d9 Logo firmy XY
Hash je výstup z programu sha256sum
(lze použít pro spočítání hashů
dalších příloh, které chcete odmazávat).
Upozorňujeme, že zrušením přílohy se poruší případné elektronické podpisy zprávy.
Pravidla pro kódované hlavičky
Hlavičky jsou v případě výskytu znaků mimo ASCII kódovány, co vám může znesnadňovat použití pravidel procmailu. Zatímco procmail vidí hlavičku
Subject: =?UTF-8?B?TcOhbWUgdsSbdMWhw60gcHJvYmzDqW0=?=
dekódovaná podoba, kterou vidíte v mailových klientech, mu dostupná není:
Subject: Máme větší problém
Toto lze řešit přidáním nové dekódované verze hlavičky (každou je nutné přidat
samostatně) ještě před dalšími pravidly v .procmailrc
, které ji budou využívat.
Příklad pro hlavičku Subject
, kterou si po dekódování uložíme do SUBJECT
:
# extract the header if it's MIME-encoded
:0 h
* ^Subject:.*=\?
SUBJECT=| formail -cXSubject: | perl -MEncode=from_to -pe 'from_to $_, "MIME-Header", "utf-8"'
# if the header is not MIME, just extract it
:0 hE
SUBJECT=| formail -cXSubject
# make a decision based on the decoded header
:0:
* SUBJECT ?? ^Subject:.*větší
bigger