メールルールの構文、変数、および関数
rules.MailRulesファイルの構文
rules.MailRulesファイルの基本構文は次の通りです。
<ヘッダ> ":"1*<空白> <条件> 1*<空白> <動作>
<ヘッダ>で使用するrule.MailRulesスクリプトの構文
• <ヘッダ> ":"1*<空白> <条件> 1*<空白> <動作>
• ::= <RFC822ヘッダ名>(例:From)
• ::= <RFC2045およびRFC2183添付ファイルヘッダ名>(例:Content-disposition)
• ::= '*'は任意またはすべてのヘッダを意味します。
• ::= '^'は任意のヘッダの前を意味します。
• ::= ''(空白)はヘッダの末尾を意味します。
• ::= '<'はHTMLメッセージの本文にあるリンクを意味します(<A>と<IMG>)。
• ::= '>'は、メッセージ本文内のテキストを意味します。
• ::= '@'は、添付ファイル一式のヘッダの末尾を意味します。
• ::= '.'は、メッセージの末尾を意味します。
1*で使用するrule.MailRulesスクリプトの構文
• <ヘッダ> ":"1*<空白> <条件> 1*<空白> <動作>
1以上を意味します。
<空白>で使用するrules.MailRulesスクリプトの構文
• <ヘッダ> ":"1*<空白> <条件> 1*<空白> <動作>
空白を意味します。
• ::= ASCIIスペースまたはASCIIタブです。
<条件>で使用するrule.MailRulesスクリプトの構文
• <ヘッダ> ":"1*<空白> <条件> 1*<空白> <動作>
• ::= ["NOT" 1*<空白>] <">単純式<"> #*と?に対応しており、大文字と小文字を区別しません。
• ::= ["NOT" 1*<空白>] "regexp:"<">正規表現式<"> #完全な正規表現式で、タグ付けした置換用グループを含みます。
• ::= ["NOT" 1*<空白>] "eregexp:"<">拡張正規表現式<"> #拡張正規表現式で、タグ付けした置換用グループを含みます。
• ::= ["NOT" 1*<空白>] "eregexpi:"<">extended regular expression<"> #大文字と小文字を区別しない拡張正規表現式で、タグ付けした置換用グループを含みます。
• ::= "IF" *<空白> "(" <式> ")"
<式>で使用するrule.MailRulesスクリプトの構文
• <式> ::= ["("] <高> [<関係> <式>] [")"]
• <term> ::= [<否定>] <lhs> [<条件> <lhs>]
• <否定> ::= "NOT" | "!"
• <lhs> ::= <定数> [<演算子> <lhs>] | [<増分> | <減分>] <変数> [<演算子> <lhs>] | <関数> | <式>
• <定数> ::= <数値> | <文字列>
• <数値> ::= ["+" | "-"] <8進数> | <10進数> | <16進数>
• <8進法> ::= "0" 1*<8進数>
• <8進数> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7"
• <10進法> ::= 1*<10進数>
• <10進数> ::= <8進数> | "8" | "9"
• <16進法> ::= "0" ["X" | "x"] 1*<16進数>
• <16進数> ::= <16進数> | ["A" | "a"] | ["B" | "b"] | ["C" | "c"] | ["D" | "d"] | ["E" | "e"] | ["F" | "f"]
• <関数> ::= "@' 1*<英字> "(" [<引数リスト>] ")"
• <arglist> ::= <引数> ["," <引数リスト>]
• <引数> ::= <定数> | <変数>
• <演算子> ::= "+" | "-" | "*" | "/" | "&" | "^" | "%"
• <増分> ::= "++"
• <減分> ::= "--"
• <条件> ::= "==" | "!=" | "|" | "&" | "~=" | "![=]~" | "=[=]~" | <lt> | <gt> | <le> | <ge>
• <lt> ::= "LT" | "<"
• <gt> ::= "GT" | ">"
• <le> ::= "LE" | "<="
• <ge> ::= "GE" | ">="
• <関係> ::= <and> | <or>
• <and> ::= "AND" | "&&"
• <or> ::= "OR" | "||"
<動作>:で使用するrules.MailRulesスクリプトの構文
• <ヘッダ> ":"1*<空白> <条件> 1*<空白> <動作>
• ::= <set> *[1*<空白> AND 1*<空白> <set>] (「SET動作」を参照)
• ::= "BCC" <ローカルアドレス>
• ::= "BLACKLIST" [<秒単位の時間>]
• ::= "DISCARDHEADER"
• ::= "DISCARDMESSAGE"
• ::= "DONE" #このメッセージのルール処理を停止します。
• ::= "INJECT" <"><ヘッダ>":"<値><"> # (\1 や \2のような置換グループを含めることが可能)
例
: IF ($LowSpamMin <= $spamlevel && $spamlevel <= $LowSpamMax) INJECT "X-SPAM-Warning:Low"
ヘッダの末尾に達したときのスパムスコアが「LOW(低)」と[MEDIUM(中)]の間である場合に、このメッセージのインターネットヘッダに「X-SPAM-Warning:LOW」というヘッダを挿入します。
• ::= "NDN" <エラーコード> [1*<空白> <文字列>] # DONEの意味になる
例
: IF ($spamlevel > $HighSpamMax && $XtremeCausesNDN == 1) NDN 550 「申し訳ありませんが、あなたのメッセージはスパムとしてブロックされました。メール管理者にお問い合わせください。」
ヘッダの末尾に達したときのスパムスコアが「HIGH(高)」より大きく、かつ不達メッセージを送るように設定している場合、SMTPエラーコード550と設定したテキスト(「申し訳ありませんが、あなたのメッセージはスパムとしてブロックされました。メール管理者にお問い合わせください。」)とともにメッセージを拒否します。
• ::= "REPLACE" <"><ヘッダ>":"<値><"> # (\1や\2のような置換グループを含めることが可能)
• ::= "SPAM" # SET $priority=junk AND $machinegenerated=1の省略表現
• ::= "STRIKE"
例
: IF ($MedSpamMax < $spamlevel) SPAM
ヘッダの末尾に達したときのスパムスコアが[MEDIUM(中)]より大きい場合に、このメッセージをスパムと判定します。
メールルールの変数
rules.MailRulesファイルは、変数を使用して各種機能を有効にします。変数はプレースホルダで、1つのメッセージが処理されている間データを保持できます。変数は条件式でテストし、SETで指定できます。メールルールには、あらかじめ備わっているものとユーザが定義するものの2種類があります。
あらかじめ備わっている変数
あらかじめ備わっている変数は、ルールのシステムによって定義され、処理中のメッセージに関するデータを保持します。この変数によって、処理中のメッセージに関する情報をメールルールが使用できるようになります。この変数についてよく理解して正しく使用しなければ、誤解が起こったり、誤った結果が発生したりすることになります。例えば、Toヘッダが受信される前に「$#To」を使用すると、0の値が返されてしまいます。
あらかじめ備わっている変数のうち、SET動作を利用してメッセージの属性を変更できるものは次の通りです。
• $MachineGenerated
値
"1", "0"
読み取り専用/読み書き可能
読み書き可能
• $Priority
値
"Normal", "Urgent", "Bulk", "Junk"
読み取り専用/読み書き可能
読み書き可能
• $IsNewsArticle
値
"1", "0"
読み取り専用/読み書き可能
読み取り専用
• $IsSpammer
値
"1", "0"
読み取り専用/読み書き可能
読み書き可能
• $MessageID
値
<Message-IDヘッダの内容>
読み取り専用/読み書き可能
読み取り専用
• $Subject
値
<subjectヘッダの内容>
読み取り専用/読み書き可能
読み書き可能
• $From
値
<From:ヘッダの内容>
読み取り専用/読み書き可能
読み取り専用
• $Sender
値
<MAIL FROM:の内容>
読み取り専用/読み書き可能
読み取り専用
• $#To
値
<To: 受信者の数>
読み取り専用/読み書き可能
読み取り専用
• $#Cc
値
<Cc: 受信者の数>
読み取り専用/読み書き可能
読み取り専用
• $#Bcc
値
<Bcc: 受信者の数>
読み取り専用/読み書き可能
読み取り専用
• $HaveReplyTo
値
"1", "0"
読み取り専用/読み書き可能
読み取り専用
• $HaveResentReplyTo
値
"1", "0"
読み取り専用/読み書き可能
読み取り専用
• $SenderIP
値
読み取り専用/読み書き可能
読み取り専用
• $MyIP
値
読み取り専用/読み書き可能
読み取り専用
• $Authenticated
値
"1", "0"
読み取り専用/読み書き可能
読み取り専用
• $AuthCanRelay
値
"1", "0"
読み取り専用/読み書き可能
読み取り専用
• $InAttachment
値
"1", "0" インターネットサービスが添付ファイルのヘッダを処理している間にこのルールを実行する場合は、1にします。
読み取り専用/読み書き可能
読み取り専用
• $#RCPTTO
値
<RCPT TOアドレスの数>
読み取り専用/読み書き可能
読み取り専用
• $#BADRCPTTO
値
<無効なRCPT TOアドレスの数>
読み取り専用/読み書き可能
読み取り専用
• $#URL
値
<メッセージ内の<A>リンクの数>
読み取り専用/読み書き可能
読み取り専用
• $#IMG
値
<メッセージ内の<IMG>リンクの数>
読み取り専用/読み書き可能
読み取り専用
• $#BODY
値
<メッセージ本文のテキストの文字数>
読み取り専用/読み書き可能
読み取り専用
• $Form.GlobalPrefs.<フィールドID>.<書式>
値
<フィールドID>と<書式>の組み合わせにより異なる。
読み取り専用/読み書き可能
読み取り専用
<フィールドID>は、[.sitepref]フォームのフィールドを表す番号です。
<書式>は、「Number」、「String」、または「Checkbox」のいずれかです。
• $Form.Config.<フィールドID>.<書式>
値
<フィールドID>と<書式>の組み合わせにより異なる。
読み取り専用/読み書き可能
読み取り専用
<フィールドID>は、([Basic Internet Setup(インターネットの基本設定)]フォームなど)インターネットサービスのフォームのフィールドを表す番号です。
<書式>は、「Number」、「String」、または「Checkbox」のいずれかです。
• $#BYTESXFERED
値
SMTP DATAコマンドの起動後に表示されるバイト数。
読み取り専用/読み書き可能
読み取り専用
• $IsSubmission
値
"1", "0"
読み取り専用/読み書き可能
読み取り専用
ユーザが定義する変数
ユーザが定義する変数は$anytextをルールに挿入して定義します。変数の値を設定してから変数を使用してください。例えば、次のルールの場合、
:IF ($myvar > 50) NDN 550 "Go Away"
次のルールを作っておく必要があります。
^: IF (1) SET $myvar = 51
このルールがないと$myvarに値が設定されないため、ルールが実行されなくなります。
メールルールの関数
関数を使用すると、インターネットサービスにあらかじめ備わっている機能を利用して、アドレスがフィルタリング用ドキュメント.にあるかどうかを確認するなどのテストを実行できます。関数は条件式で使用され、関数によってさまざまな値が返されます。関数を独自に定義することはできません。利用可能な関数とその構文は次の通りです。
• @inblocklist(<文字列>または<変数> [, case]) # caseは「yes」、「no」、「true」、「false」のいずれかです。デフォルトは「no」です。
TRUE(1)またはFALSE(0)が返されます。
• @inwordlist(<リスト名>, <文字列>または<変数> [, case]) # caseは「yes」、「no」、「true」、「false」のいずれかです。デフォルトは「no」です。
TRUEまたはFALSEが返されます。
@inblocklistと似ていますが、個別のリスト名を<リスト名>に入れて使用できます。リスト名は「lists.」で始まる名前にする必要があります。case引数を「TRUE」、「YES」、または0以外の数値にした場合には、大文字と小文字を区別させることができます。
• @wordcount(<リスト名>, <文字列>または<変数> [, case]) # caseは「yes」、「no」、「true」、「false」のいずれかです。デフォルトは「no」です。
<文字列>に指定した語句が<リスト名>のファイルまたはドキュメントに含まれる数を返します。case引数を「TRUE」、「YES」、または0以外の数値にした場合には、大文字と小文字を区別させることができます。
• @seenheader(<文字列>または<変数>)
TRUEまたはFALSEが返されます。
• @istrustedip(<文字列>または<変数> [, リスト名])
TRUEまたはFALSEが返されます。
オプションの<リスト名>に入れるリストの名前は、「lists.」で開始し、IPアドレスの値かマスクを(1行に)記述する必要があります。
• @istrustedaddress(<文字列>または<変数> [, リスト名])
TRUEまたはFALSEが返されます。
オプションの<リスト名>に入れるリストの名前は、「lists.」で開始し、ドメイン名を(1行に)記述する必要があります。ドメイン名にはワイルドカードを使うことはできません。
• @isspamip(<文字列>または<変数> [, リスト名])
TRUEまたはFALSEが返されます。
オプションの<リスト名>に入れるリストの名前は、「lists.」で開始し、IPアドレスの値かマスクを(1行に)記述する必要があります。
• @isspamaddress(<文字列>または<変数> [, リスト名])
TRUEまたはFALSEが返されます。
オプションの<リスト名>に入れるリストの名前は、「lists.」で開始し、ドメイン名を(1行に)記述する必要があります。ドメイン名にはワイルドカードを使うことはできません。
• @islocaladdress(<文字列>または<変数>)
TRUEまたはFALSEが返されます。
• @isrecipient(<文字列>または<変数>)
TRUEまたはFALSEが返されます。
• @allcaps(<文字列>または<変数>)
TRUEまたはFALSEが返されます。
• @punctcount(<文字列>または<変数>)
<文字列>または<変数>に含まれる句読文字の数が返されます。
句読文字とは、空白文字でも英数字でもない印刷可能な文字のことです。
• @rcptto(<数値>または<変数>)
(0から始まる)引数の要求に応じて、N番目の有効なRCPT TO値を含む文字列が返されます。
以上の関数は、次のインターネットサービスの命令文と同じように動作します。
• @split(...)
• @substr(...)
• @length(...)
• @indexof(...)
• @upper(...)
• @lower(...)
• @rand()
SET動作
<set> 動作を利用すると、数多くのブール演算子をルールのテスト部分に簡単に記述できます。
• <set>
::= "SET" 1*<空白> <変数> *<空白> "=" *<空白> <値> *[ 1*<空白> "AND" 1*<空白> <変数> *<空白> "=" *<空白> <値> ]
いくつかの例を以下に記します。
• <not>
• ::= "NOT" | "!"
• <and>
• ::= "AND" | "&&"
• <or>
• ::= "OR" | "||"
• <gt>
• ::= "GT" | ">"
• <lt>
• ::= "LT" | "<"
• <ge>
• ::= "GE" | ">="
• <le>
• ::= "LE" | "<="
SETの変数コンポーネントで使用する構文
<set>動作の<変数>コンポーネントによって、あらかじめ定義されている変数と独自に定義する変数の両方を使用できるようになります。
::= "SET" 1*<空白> <変数> *<空白> "=" *<空白> <値> *[ 1*<空白> "AND" 1*<空白> <変数> *<空白> "=" *<空白> <値> ]
あらかじめ定義されている変数は<builtin>です。独自に定義する変数については、テキストだけの変数は<alpha>、テキストと数値を組み合わせた変数は<alphanum>です。
::= "$" ["{"] <builtin> or 1<alpha>*<alphanum_> ["}"]
SETの値数コンポーネントで使用する構文
<set>動作の<値>コンポーネント(<動作>スクリプトの小区分)によって、値を返すシステム関数が定義されます。
::= "SET" 1*<空白> <変数> *<空白> <引数オプション> *<空白> <値> *[ 1*<空白> "AND" 1*<空白> <変数> *<空白> <引数オプション> *<空白> <値> ]
<引数オプション> ::= "=" | "/=" | "*=" | "-=" | "+=" | "%=" # 値が<文字列>の場合は =」と「+=」だけが有効。
詳細情報
|