テスト
テスト部には、特定のヘッダで実行するテストの内容を記述します。ルールのスクリプト言語では、テストは通常次の3種類に区分されます。
・単純式
・正規表現式
・条件式
単純式
単純式は二重引用符で囲まれた文字列("")で、この文字列をRFC-2822ヘッダのデータ内で適用します。文字列の大文字と小文字は区別されません。文字列には、次のような単純なワイルドカードを含めることができます。
・クエスチョン(?)−任意の1文字を表します。
・アスタリスク(*)−任意の文字列を表します。
引用符で囲んだ文字列の前に、NOTを入れることもできます。これは、そのテストを反対の意味にすることを表します。例えば、次のRFC-2822ヘッダをルールによって処理する場合を見てみましょう。
例
Date: Tue, 11 Feb 2003 16:27:41 -0500
・Date: "Feb 2003" spam
条件がTRUEならば、メッセージをスパムと認定します。
・Date: "Tue, 11 Feb 2003 16:27:41 -0500" spam
条件がTRUEならば、メッセージをスパムと認定します。
・Date:NOT "200?" spam
条件がFALSE(TRUEでない)ならば、メッセージをスパムとは認定しません。
・Date:"*Feb*" spam
条件がTRUEならば、メッセージをスパムと認定します。
正規表現式と拡張正規表現式(regexpとeregexp)
正規表現式は、一致する文字列のパターンを記述する一般的な方法です。通常、正規表現式はUnix環境で使用され、単純式より詳細な一致パターンを利用できます。また、一致したデータを、後で使用できるよう変数に保存することができます。インターネットサービスは拡張正規表現式(eregexp)にも対応していますが、同じ検索を行う場合は、正規表現式の方が2倍早く処理できます。
例1
From: regexp:".*@[0-9]+\\..*" spam
この式は、最初の部分のドメイン名がすべて数字であるかどうかをチェックし、もしそうであればスパムと認定します。
例2
Subject: regexp:"[A-Z\\?\\!\\.\\,0-9]+" spam
この式は、件名がすべて数字と句読点付きの大文字であるかどうかをチェックし、もしそうであればスパムと認定します。
例3
Content-Type: regexp:".*name=\"\\(.+\\)\"" SET $attname="\\1"
この式は、Content-Typeヘッダ内の添付ファイル名を見つけ、(ウイルス対策などのために)他のルールで使用できるよう$attname変数に保存します。
拡張表現式
「regexp: 条件」以外に、次の式を利用することができます。
・eregexp: 拡張正規表現式の構文が利用できます。
・eregexpi: 拡張表現式の構文が利用でき、大文字と小文字が区別されません。
拡張正規表現式を利用すると、現在の正規表現式の構文よりもはるかに強力な照合処理を行うことができますが、その速度は遅くなります。eregexpiは、[Aa]など次のような構文を含む正規表現式を記述している場合に使用する必要があります。
eregexp:"[Vv][Ii][Aa][Gg][Rr][Aa]"
この式は次のように書き直すこともできます。
eregexpi:"viagra"
条件式
条件式は、変数の状態をテストしたり、あらかじめ備わっている機能を利用したりする場合に使用します。条件式は常に「IF(式)」の形式で記述し、変数のテストを行うか、あらかじめ備わっている関数を呼び出すのに使用します。条件式の例を[rules.MailRules]ファイルからいくつか見てみましょう。
例
^: IF (@istrustedip($senderip)) DONE
この式は、
・信頼できるIPの一覧にIPアドレスが登録されていれば、ルールの処理を省略します。
・任意のヘッダが処理される前に(^)、既存の変数である差出人のIPアドレス($senderip)が信頼できるIP一覧にあれば、DONE動作を行います(これ以上の処理を省略します)。
例
From: if (@isspamaddress($from)) SET $spamlevel += 101 AND $spamtests += "FROM_IN_SPAM_FILTERS;"
この式は、
・From名がスパムアドレスの一覧に登録されているかどうかをチェックします。
・Fromヘッダの処理で、Fromのアドレスがスパムアドレスの一覧にあれば、100を超える値にスパムレベルを設定し、その理由を$spamtests変数に追加します。
| ||