block-patterns.rb

Do tohoto souboru jsou soustředěné funkce, kterými se testuje obsah mailu.

Po každé změně tohoto souboru je dobré příkazem "ruby -c block-patterns.rb" otestovat, zda v něm není syntaktická chyba.

Seznam funkcí a co testují:

test_line_header() - všechny řádky záhlaví
test_subject() - Subject
test_to() - To:
test_from() - From:
test_line_body() - prvních MAXLINES řádek těla mailu
test_attachment() - seznam příloh
 

Každá funkce má v těle seznam testovacích pravidel. Pravidla vypadají například takto:

dele="spam167" if /^X-Mailer:.+jpfree.+Group.+Mail.+Express/i
back="spam518" if /^X-Habeas-SWE/i
pass="forw019" if /^Reply-To:.*Physical Review/i

Obecně pak vypadají takto:

AKCE = ID  if  TEST

AKCE - co s mailem udělat, může být dele, back nebo pass (zahodit, odmítnout, pustit)

ID - skládá se ze zkratky pro důvod a čísla, např. vir324, spam333. Tento formát je doporučeno dodržovat, zapisuje se do logu a počítají s ním programy, které logy zpracovávají. Zkratky mohou být spam (mail je spam), vir (mail obsahuje virus) nebo forw (výjimky = mail určitě není spam, nechat projít).

TEST - výraz, u různých funkcí se liší:

U všech funkcí s výjimkou test_attachment lze testovat regulárním výrazem jednu řádku v proměnné $_ (neboli není nutné uvádět, co se testuje).

U funkcí test_line_header a test_line_body se testuje celá řádka, u funkcí test_subject jen subject (tedy bez Subject: na začátku), u funkcí test_to a test_from jen vypreparované adresy oddělené mezerami.

Příklad z test_line_header:

pass="forw019" if /^Reply-To:.*Physical Review/i

Pokud řádka záhlaví odpovídá regulárnímu výrazu ("i" za druhým lomítkem říká, že při testování nezáleží na velikosti písmen), mail vždy pustit (je to vyjímka).

U funkce test_attachment jsou pro testování k dispozici tři proměnné: type (MIME typ přílohy, např. "audio/x-wav"), name (jméno přílohy, např "test.doc") a bodylines (počet řádků těla mailu).

Příklady pravidel:

back="vir1" if /\.(PIF|SCR|EXE|BAT|COM)/i =~ name

Odmítnout maily, které mají přílohu s příponami, jejichž jména končí na .pif, .scr, .exe, .bat a .com

back="vir20" if (( /\.Zip/i =~ name) && bodylines.between?(390,500))

Odmítnout maily, které mají přílohu s příponou .zip a velikost těla mailu je v rozmezí 390 a 500 řádek