プロセルピナ
Top Internet
Mail
Private
Proxy
Capture
Device
Download Config
and
Words
Online
Help
Online
Home
[BACK]
Top > Mail > Filtering > Use Macro

 
Filtering Command
メールフィルタからマクロを呼び出す
(やや高度な内容)
Mail Filter
Top | Menu | IpBlacklist | Bayesian | Edit | Commands   


メールフィルタだけでは処理できない文字列操作を含むフィルタリングを行う場合、 「プロセルピナ」のマクロを呼び出して処理することができます。
マクロの呼び出しは「macroコマンド」で行います。
 

「macroコマンド」の書式


macro "マクロファイルのファイル名"

マクロには Str[ ]文字列配列 がインプットとして渡されます。 マクロからの戻り値はOutput[ ]の文字列配列に格納されます。
Output[ ]は、マクロからの戻り値専用の文字列配列として用意されています。

 

サンプル


マクロ呼び出しを使用するメールフィルタの例として、「X-Priority.txt」が用意されています。
「X-Priority.txt」は、次のような内容のメールフィルタです。


Fig.1: メールフィルタ「X-Priority.txt」

【説明】
「X-Priority.txt」は、X-Priorityヘッダの値から優先度を判定し、結果を表示するメールフィルタです。
X-Priorityヘッダの値には 一般的に数値が使用されますが、「1」のように数値だけが設定されている場合と、 「1 (Highest)」といったコメント付きの場合があり、 単純に値全体を文字列マッチングするだけでは処理できません。
そこで、「1 (Highest)」のようなヘッダ値の場合は 「1」だけを取り出す必要があります。 このメールフィルタでは、その「取り出し処理」をマクロで記述し、 それを呼び出すことで X-Priorityヘッダの値を取得しています。

(注: macroコマンドの説明の為に マクロを呼び出す処理になっていますが、RegexIsMatch()を使ったり、 State変数を使ったりすることで、よりスマートに処理することができます)

まず1行目のisVoid()による判定処理により、 メールにX-Priorityヘッダが含まれない場合は処理全体がスキップされます。

マクロに渡すインプットとして、2行目で X-Priorityヘッダの値の部分 をStr[0]に設定しています。
例えば「X-Priority: 2 (High)」といったヘッダの場合は、「2 (High)」が設定されます。

4行目の「macroコマンド」で「X-Priority補助.txt」のマクロを呼び出し、 Str[ ]文字列配列に設定したX-Priorityヘッダの値を処理しています。
「X-Priority補助.txt」マクロの処理内容により、値を解析した結果が Output[0] に設定されているので、あとはメールフィルタの処理で 単純な文字列マッチングによる分岐処理で優先度を表示しています。

このメールフィルタから呼び出されるマクロの例を次に示します。


Fig.2: マクロ「X-Priority補助.txt」

マクロ部分の簡単な説明

input.line(number);
input.line: 入力のnumber行目を読み出し

string.Trim(" \t");
Trim: 文字列stringから前後のスペースとタブを取り除く

stringA.IndexOf(stringB);
IndexOf: 文字列stringA内の 文字列stringB の位置を検出

string.Substring0(length);
Substring0: 文字列stringの先頭からlength文字を取り出し

put: value=string;
value: 戻り値に 文字列string を設定




【Note】
優先度のヘッダ(X-Priorityヘッダ)の解析に関しては、 「Headerコマンド」の説明で、 マクロを使用しない簡単な方法を説明しています。

[BACK]
プロセルピナ