Modul 6 · 6.1
Jak fungují filtry
Modul 6: Automaticky: filtry a odpověď v nepřítomnosti · Doba čtení: 10 minut
Cíl lekce: Po této lekci dokážete vysvětlit, kde a kdy filtry běží, přečíst skript filtrů v jazyce Sieve a předpovědět, do které složky příchozí zpráva dorazí.
Klíčové pojmy: filtr, Sieve, ManageSieve, sada filtrů, pravidlo, podmínka, akce, implicitní uložení, stop, obsahuje, odpovídá, odpovídá výrazu
Filtry běží na serveru
Filtr třídí Vaši poštu automaticky: e-maily se slovem "factuur" (faktura) v předmětu do složky Facturen, newslettery do vlastní složky. Nejdůležitější je vědět, že toto třídění neprobíhá ve webmailu, ale na poštovním serveru, a to v okamžiku, kdy je zpráva doručena do Vaší schránky.
Z toho vyplývají tři věci:
- Filtry fungují i tehdy, když je webmail zavřený. Váš notebook může být vypnutý. Telefon uvidí e-mail rovnou ve správné složce.
- Filtry fungují pouze na novou poštu. E-maily, které už ve schránce máte, zůstanou tam, kde jsou. Pokud dnes vytvoříte filtr, starší zprávy přesunete sami.
- Filtry platí pro jednu schránku. Každá schránka má své vlastní filtry. Chcete-li něco nastavit pro všechny schránky své domény, například zablokovat odesílatele, uděláte to v ovládacím panelu svého hostingu.
Filtry jsou napsány v jazyce Sieve, jednoduchém jazyce určeném speciálně pro filtrování pošty (RFC 5228). Poštovní server u WebOké používá Dovecot s Pigeonhole, implementací jazyka Sieve pro Dovecot. Webmail převede Vaše volby ve formuláři na skript Sieve a pošle jej na server protokolem ManageSieve (RFC 5804). Sieve psát nemusíte, ale kdo ho umí číst, přesně rozumí tomu, co jeho filtry dělají.
Sada filtrů, pravidla, podmínky a akce
Sada filtrů je celý skript: všechny filtry Vaší schránky v jednom souboru. Sad filtrů můžete mít více, ale aktivní je vždy jen jedna.
V sadě filtrů jsou uloženy filtry, ve webmailu se jim říká také pravidla. Každý filtr má:
- název, který slouží jen Vám;
- rozsah: zpráva musí splňovat všechna pravidla, jedno z pravidel, nebo filtr platí pro všechny zprávy;
- jednu nebo více podmínek: kam se filtr dívá (předmět, odesílatel, jiná hlavička), jak porovnává a s jakým textem;
- jednu nebo více akcí: co se stane, když jsou podmínky splněny.
Porovnávat lze třemi způsoby:
| Ve webmailu | V Sieve | Význam |
|---|---|---|
| obsahuje | :contains | text se nachází kdekoli v hlavičce |
| odpovídá | :is | hlavička je přesně tento text |
| odpovídá výrazu | :matches | vzor s * (žádný nebo více znaků) a ? (přesně jeden znak) |
Velká a malá písmena nehrají ani v jednom z těchto tří případů roli. Sieve ve výchozím stavu porovnává podle pravidla i;ascii-casemap, které velká a malá písmena považuje za stejná. "factuur" tedy najde také "FACTUUR" a "Factuur".
Takto vypadá sada filtrů
Ve webmailu si můžete sadu filtrů zobrazit jako text přes Filtry > Akce > Upravit sadu pravidel. Příklad tak, jak jej webmail zapisuje:
require ["fileinto"];
# rule:[Nieuwsbrieven]
if exists "List-Id"
{
fileinto "Nieuwsbrieven";
stop;
}
# rule:[Facturen]
if allof (header :contains "subject" "factuur")
{
fileinto "Facturen";
}
# rule:[Collega Daan]
if false # header :contains "from" "daan@example.com"
{
fileinto "INBOX.Team";
}Řádek po řádku:
require ["fileinto"];žádá server o rozšíření potřebné k přesunu do složky. Webmail tento řádek doplní nahoru sám, včetně všech rozšíření, která skript používá.# rule:[Nieuwsbrieven]je komentář. Podle něj webmail rozpozná název Vašeho filtru. Server tento řádek přeskočí.if exists "List-Id"je podmínka: zpráva má hlavičku List-Id. Mají ji newslettery a e-mailové konference (RFC 2919).fileinto "Nieuwsbrieven";přesune zprávu do složky Nieuwsbrieven (newslettery). Název složky je úplný název na serveru s tečkou jako oddělovačem (lekce 5.1). Složka pod Příchozí poštou se tedy jmenujeINBOX.Team.stop;zastaví celý skript. Další filtry se už na tuto zprávu nedívají. Ve webmailu se tato akce jmenuje Zastavit pravidla.if false # ...je vypnutý filtr. Pokud vypnete volbu Filtr aktivní, webmail změní podmínku nafalse: nikdy neplatí. Původní podmínka zůstane jako komentář, abyste ji později mohli znovu zapnout.

Shora dolů
Server čte skript shora dolů a prochází každý filtr. Přitom platí tři pravidla.
1. Bez akce zůstane zpráva v Příchozí poště. Sieve zná implicitní uložení (implicit keep, RFC 5228, oddíl 2.10.2): pokud žádný filtr nic neudělá, zpráva normálně dorazí do Příchozí pošty.
2. Po přesunu už zpráva v Příchozí poště není. Akce fileinto implicitní uložení vypne. Zpráva skončí ve zvolené složce, a ne navíc v Příchozí poště. Pokud chcete obojí, použijte Zkopírovat zprávu do.
3. Bez stop se dívají i další filtry. Pokud stop chybí, server pokračuje dalším filtrem. Pokud odpovídá i ten, server provede i jeho akci. Dva přesuny do dvou složek znamenají, že zpráva skončí v obou složkách. S stop rozhoduje první odpovídající filtr.
Proto záleží na pořadí. Ve výše uvedeném příkladu je Nieuwsbrieven nad Facturen, a to se stop. Newsletter s předmětem "Je factuur" (Vaše faktura) proto skončí v Nieuwsbrieven, a ne ve Facturen. Pokud pořadí obrátíte, stejný newsletter skončí ve Facturen, protože tento filtr nemá stop a je teď první. Newsletter by pak byl dokonce v obou složkách. Nejkonkrétnější filtry proto umístěte nahoru a dejte jim stop.
Projít zprávu krok za krokem: takto to předpovíte
Vezměte zprávu a projděte skript tak, jak to dělá server:
- Začněte prvním filtrem. Je vypnutý (
if false)? Přeskočte ho. - Platí podmínka? Podívejte se přesně na hlavičku:
subjectje předmět,fromodesílatel se jménem a adresou,topříjemce. - Pokud ano: proveďte akce. Pokud je tam
stop, jste hotovi. - Pokud ne, nebo pokud chybí stop: přejděte k dalšímu filtru.
- Na konci: pokud žádný filtr zprávu nepřesunul ani nesmazal, je v Příchozí poště (
INBOX).
S těmito pěti kroky přečtete jakýkoli skript, i když je dlouhý.
V praxi: takto to funguje ve webmailu
Filtry najdete v Nastavení > Filtry. Seznam zobrazuje Vaše filtry v pořadí, v jakém je server provádí; pořadí změníte přetažením. V nabídce Akce je položka Upravit sadu pravidel: tam skript uvidíte a upravíte jako text. Postup vytvoření nového filtru najdete v příručce k Roundcube v části Vytvoření filtru. V jiných webmailech to funguje podobně: Gmail má filtry, Outlook.com pravidla. Ty sice Sieve nepoužívají, ale i tam záleží na pořadí a na zastavení zpracování.
Shrnutí
- Filtry běží na poštovním serveru při doručení, tedy i při zavřeném webmailu, a pouze na novou poštu.
- Webmail zapisuje Vaše filtry jako skript Sieve (RFC 5228) a ukládá jej na server pomocí ManageSieve.
- Obsahuje, odpovídá a odpovídá výrazu ve výchozím stavu nerozlišují velká a malá písmena.
- Pokud žádný filtr nic neudělá, zpráva zůstane v Příchozí poště; po přesunu už v Příchozí poště není.
- Filtry se provádějí shora dolů; stop ukončí skript, takže výsledek určuje pořadí.
Kvíz
Úkol
Úkol A6.1: Kam tato zpráva dorazí? Otevřete materiál filters-1.txt, sadu filtrů tak, jak ji zapisuje webmail, a berichten-1.txt s hlavičkami čtyř příchozích zpráv očíslovaných 1 až 4. Projděte každou zprávu podle pěti kroků z této lekce: shora dolů, vypnuté filtry přeskočit, sledovat stop. U každé zprávy vyplňte název složky, do které dorazí, přesně tak, jak je uveden ve skriptu; pokud zpráva skončí v Příchozí poště, vyplňte INBOX. Program porovná Vaše čtyři odpovědi s klíčem a u každé zprávy ukáže, který filtr rozhodl.
Další čtení
Kde jsou uvedeny kroky ve webmailu, platí pro webmail WebOké; v jiných webmailech to funguje podobně.
- Roundcube Webmail 7.1: Vytvoření filtru
- Roundcube Webmail 7.2: Příklady užitečných filtrů
- E-mailová pravidla na straně serveru (filtry na serveru)
- RFC 5228, Sieve: An Email Filtering Language (anglicky): https://www.rfc-editor.org/rfc/rfc5228
- RFC 5804, ManageSieve (anglicky): https://www.rfc-editor.org/rfc/rfc5804
- RFC 2919, List-Id (anglicky): https://www.rfc-editor.org/rfc/rfc2919
