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.
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