Advertising banner:
 
 
 A192
 
関連トピック




ここで、[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*<空白> <動作>
以上を意味します。

<空白>で使用する[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" 9*<8進数字>
<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と設定したテキスト(「Sorry, 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
<メッセージ内の<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」のいずれかです。デフォルトは「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*<空白> <変数> *<空白> <引数オプション> *<空白> <> ]
<引数オプション>        ::=     "=" | "/=" | "*=" | "-=" | "+=" | "%="  # 値が<文字列>の場合は = += だけが有効。



hirosue Shino Web Site