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

 
Filtering Command
Headerコマンド
Mail Filter
Top | Menu | IpBlacklist | Bayesian | Edit | Commands   


 
【記述例 1】  (移動)
  if  Header("X-Month").Contains("ABCDEF") move  dir="{{GTMAIL_HOME}}\\mBox\\other"
(注:実際には折り返さず 一行で記述します)

 
【記述例 2】  (フラグを立てる)
  if  Header("X-Priority").StartsWith("1")  flag


 
Headerコマンドは 指定されたヘッダの値を参照し、条件に一致する場合に指定された処理を行います。
フィルタエディタからは、 [その他のヘッダ]ボタンで設定します。

上記の【記述例 1】では、 メールにX-Monthのヘッダがあり、そのヘッダの値が ABCDEF を含んでいた場合に、メールを {{GTMAIL_HOME}}\mBox\other のフォルダに移動します。
(補足:完全一致で移動する場合は 「if Header("X-Month").Equals("ABCDEF") move  dir="{{GTMAIL_HOME}}\\mBox\\other"」 となります)

上記の【記述例 2】では、 メールのX-Priorityヘッダ(Mozilla Thunderbirdなどで使用されている重要度の指定)の値が、 1 で開始される場合にフラグを立てます。
先頭文字で判断しているので(StartsWith)、値が1でも10でも同じようにフラグが立ちますが、 X-Priorityに指定される重要度の値は一桁の数値なので、この場合は問題なく処理できます。
逆に、Equalsを使った完全一致で1かどうかを判定すると、
  X-Priority: 1 (Highest)
といったコメント表記が後ろに含まれる場合に不一致と判定されてしまいます。 この場合では、正規表現を使った場合、よりスマートに解決できます。例えば
「 if Header("X-Priority").RegexIsMatch("1([ \\(]+|$)") flag 」
のような記述するとよいでしょう。


 

応用例 1


サンプルとして用意されている「重要メール検出.txt」のメールフィルタです。
受信したメールのFromアドレスがアドレス帳に登録されていた場合で、かつ、 重要度が指定されているメールの件名を表示し、 そのメールのフラグを立てます。

 
if From.isAddressBooked("addr") Jump:CheckPriority
* Jump:End
:CheckPriority
* State=Header("X-Priority").Length
if State<1 Jump:End
* State=Header("X-Priority")
if State>2 Jump:End
print "優先("+State+") 件名: "+Subject
* flag
:End

 
Fig.1: 重要メール検出.txt

Refer  From.isAddressBookedコマンド
Fromヘッダのアドレス帳チェックは
  From.isAddressBooked("addr")
で行うことができます。

【応用例1】の説明
4行目の「* State=Header("X-Priority").Length」で、State変数にX-Priorityヘッダの 文字列長(値の長さ) を設定しています。 X-Priorityヘッダが無い場合は1以下になるので、Endラベルにジャンプして終了します(5行目)。
6行目の「* State=Header("X-Priority")」で、State変数にX-Priorityヘッダの値を数値読みしたものを設定しています。 State変数は数値変数なので、Header("X-Priority") は文字列から数値に変換されます。 この際、数値として有効な部分のみが変換されるので、X-Priorityヘッダの記述が  X-Priority: 1 の場合だけでなく、  X-Priority: 1 (Highest) であっても、同じように数値の 1 がState値に設定されます。


【Note】
優先度のヘッダ(X-Priorityヘッダ)の解析に関しては、 「メールフィルタからマクロを呼び出す」の説明で、 マクロを使用した やや複雑な方法を紹介しています。


 

等価なメタ定義


このHeaderコマンドで メールのSubjectヘッダを参照するには、
  Header("Subject")
と記述しますが、これは次のメタ定義と等価です。
  Subject

(正確には、 Header("Subject") がメールを解析してヘッダ値を取得しているのに対し、 Subjectはメール一覧の値を参照しています。)

次の例では、数値変数 Int[0] と Int[1] に設定される値は同じになります。 どちらも件名の文字列長が設定されます。


件名とその長さを表示

このようなメタ定義は、Subjectの他に、次のようなものがあります。
  Content-type
  To

次の2行はどちらも、Content-typeヘッダの値が text/html だった場合に フラグを立てます。


Content-typeの判定 (どちらも結果は同じ)


一方、 Header("From") と、 From は違ったものを意味します。
Header("From")では、Fromヘッダの値全体を取得するのに対し、 Fromはメールアドレスの部分のみを取得します。
Fromヘッダに記述されたメールアドレス以外の部分を取得するには、 FromName を使用します。

次に示すフィルタは、各メールの Header("From")、 From、 FromName をメッセージエリアに表示するものです(printコマンド)。


Header("From")", From, FromName

上記のフィルタの実行結果は、例えば次のようなものになります (SPAMメールのフォルダに対して実行した例)。


フィルタ実行例

このように、 From はメールアドレスの部分のみを取得します。
例えば、メール発信者のアドレスが アドレス帳の addrフィールド に記載されているかどうかをチェックするには、 次のように記述します。


Fromメタ定義


[BACK]
プロセルピナ