関連トピック
このヘルプは、rules.MailRulesファイルの基本構文、変数、関数について説明いたします。デフォルトのrules.MailRulesドキュメントについての詳細は、rules.MailRulesファイルのデフォルト設定を参照してください。SMTPメールルールについての詳細は、rules.MailRulesの使用を参照してください。
rules.MailRulesファイルの構文
rules.MailRulesファイルの基本構文は以下の通りです。
<ヘッダ> ":" 1*<空白> <条件> 1*<空白> <動作>
<ヘッダ>で使用するrules.MailRulesスクリプトの構文
・<ヘッダ> ":" 1*<空白> <条件> 1*<空白> <動作>
・::= <RFC822 ヘッダ名>(例:From)
・::= <RFC2045およびRFC2183添付ファイルヘッダ名>(例:Content-disposition)
・::= '*' は任意またはすべてのヘッダを意味します。
・::= '^' は任意のヘッダの前を意味します。
・::= '' (一重引用符2つ) はヘッダの末尾を意味します。
・::= '<' はHTMLメッセージの本文にあるリンクを意味します(<A>と<IMG>)。
・::= '>' メッセージ本文内のテキストを意味します。
・::= '@' は、添付ファイル一式のヘッダの末尾を意味します。
・::= '.' は、メッセージの末尾を意味します。
1* で使用するrules.MailRulesスクリプトの構文
・<ヘッダ> ":" 1*<空白> <条件> 1*<空白> <動作>
1以上を意味します。
<空白>で使用するrules.MailRulesスクリプトの構文
・<ヘッダ> ":" 1*<空白> <条件> 1*<空白> <動作>
空白を意味します。
・::= ASCIIスペースまたはASCIIタブです。
<条件>で使用するrules.MailRulesスクリプトの構文
・<ヘッダ> ":" 1*<空白> <条件> 1*<空白> <動作>
・::= ["NOT" 1*<空白>] <">単純式<"> # * と ? に対応しており、大文字と小文字を区別しない。
・::= ["NOT" 1*<空白>] "regexp:" <">正規表現式<"> # 完全な正規表現式で、タグ付けした置換用グループを含む。
・::= ["NOT" 1*<空白>] "eregexp:" <">拡張正規表現式<"> # 拡張正規表現式で、タグ付けした置換用グループを含む。
・::= ["NOT" 1*<空白>] "eregexpi:" <">拡張正規表現式<"> # 大文字と小文字を区別しない拡張正規表現式で、タグ付けした置換用グループを含む。
・::= "IF" *<空白> "(" <式> ")"
<式>で使用するrules.MailRulesスクリプトの構文
・<式> ::= ["("] <項> [<関係> <式>] [")"]
・<項> ::= [<否定>] <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*<英字> "(" [<引数リスト>] ")"
・<引数リスト> ::= <引数> ["," <引数リスト>]
・<引数> ::= <定数> | <変数>
・<演算子> ::= "+" | "-" | "*" | "/" | "&" | "^" | "%"
・<増分> ::= "++"
・<減分> ::= "--"
・<条件> ::= "==" | "!=" | "|" | "&" | "~=" | "![=]~" | "=[=]~" | <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 "Sorry, your message has triggered a spam block, please contact the postmaster."
ヘッダの末尾に達した時のスパムスコアが「HIGH(高)」より大きく、かつ不達メッセージを送るように設定している場合、SMTPエラーコード550と設定したテキスト(「, your message has triggered a spam block, please contact the postmaster.」)とともにメッセージを拒否します。
・::= "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
値
<送信SMTPホストのIPアドレス>
読み取り専用/読み書き可能
読み取り専用
・$MyIP
値
<このホストのIPアドレス>
読み取り専用/読み書き可能
読み取り専用
・$Authenticated
値
"1", "0"
読み取り専用/読み書き可能
読み取り専用
・$AuthCanRelay
値
"1", "0"
読み取り専用/読み書き可能
読み取り専用
・$InAttachment
値
"1", "0" インターネットサービスが添付ファイルのヘッダを処理している間にこのルールを実行する場合は、1にします。
読み取り専用/読み書き可能
読み取り専用
・$#RCPTTO
値
<RCPT TOアドレスの数>
読み取り専用/読み書き可能
読み取り専用
・$#BADRCPTTO
値
<無効なRCPT TO アドレスの数>
読み取り専用/読み書き可能
読み取り専用
・$#URL
値
<メッセージ内の<A>リンクの数>
読み取り専用/読み書き可能
読み取り専用
・$#IMG
Value
<メッセージ内の<IMG>リンクの数>
読み取り専用/読み書き可能
読み取り専用
・$#BODY
値
<メッセージ本文のテキストの文字数>
読み取り専用/読み書き可能
読み取り専用
・$Form.GlobalPrefs.<フィールドID>.<書式>
値
<フィールドID>.<書式>の組み合わせにより異なる。
読み取り専用/読み書き可能
読み取り専用
<フィールドID>は、[.sitepref]フォームのフィールドを表す番号です。
<書式>は、「Number」「String」「Checkbox」のいずれかです。
・$Form.Config.<フィールドID>.<書式>
値
<フィールドID>.<書式>の組み合わせにより異なる。
読み取り専用/読み書き可能
読み取り専用
<フィールドID>は、[インターネットの基本設定(Basic Internet Setup)]などインターネットサービスのフォームのフィールドを表す番号です。
<書式>は、「Number」「String」「Checkbox」のいずれかです。
ユーザが定義する変数
ユーザが定義する変数は、$anytextをルールのに挿入して定義します。変数の値を設定してから変数を使用してください。例えば、次のルール、
:IF ($myvar > 50) NDN 550 "Go Away"
では、以下のルールを作っておかなければなりません。
^: IF (1) SET $myvar = 51
作っておかなければ、$myvarに値が設定されないため、ルールが実行されなくなります。
メールルールの関数
関数を利用すると、アドレスがフィルタリング用ドキュメントにあるかどうかを確認するテストを行うなど、インターネットサービスにあらかじめ備わっている機能を利用することができます。関数は条件式で使用され、関数によって様々な値が返されます。独自の関数を定義することはできません。利用可能な関数とその構文は次の通りです。
・@inblocklist(<文字列>または<変数> [, case]) # caseは「yes」、「no」、「true」、「false」のいずれかです。 The default is "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*<空白> <変数> *<空白> <引数オプション> *<空白> <値> ]
<引数オプション> ::= "=" | "/=" | "*=" | "-=" | "+=" | "%=" #値が<文字列>の場合、=と+=のみ有効
| ||