擬似フィールド macro.* はテンプレート専用です。
検証データ (文字列) の取得および変数代入を担当する代入系ルールと
対象メッセージの検証を担当する検証系ルールの 2 種類があります。
それらのルールをセットで使用する (連続的に配置する) ことで、
はじめて効果を発揮するマクロ的な擬似フィールドです。
代入系ルールは検証前の準備作業 (検証データの取得) を担当する為、
実行結果に関わらず、該当件数にはカウントされません。
一方、検証系ルールは実行結果に応じて該当件数にカウントされます。
テンプレートの要件が [閾値以上のルールに該当する...] の場合、
上記の仕様を考慮して閾値を決定して下さい。
なお、検証データ (文字列) は変数 $0 〜 $9 で管理します。
代入系ルールの仕様は以下の通りです。
- (macro.clear)
変数 $0 〜 $9 を一括で初期化する - (macro.clear.$0) 〜 (macro.clear.$9)
変数 $0 〜 $9 を個別に初期化する - (macro.assign.$0) 〜 (macro.assign.$9)
変数 $0 〜 $9 に文字列型の変数または定数を代入する
※文字列型の変数は $1+$2+$3 のように + で連結した上で
代入することができます。
※文字列型の定数は "KEYWORD" のように対象文字列を "" で
括る必要があります。
※変数と定数の混在 (連結) はサポートしていません。
- (macro.assign.フィールド名:)
変数 $0 に指定フィールドの値 (文字列) を代入する - (macro.assign.header)
変数 $0 に擬似フィールド <header> の値 (文字列) を代入する - (macro.assign.body)
変数 $0 に擬似フィールド <body> の値 (文字列) を代入する - (macro.assign.body-)
変数 $0 に擬似フィールド <body-> の値 (文字列) を代入する - (macro.assign.full)
変数 $0 に擬似フィールド <full> の値 (文字列) を代入する - (macro.assign.full-)
変数 $0 に擬似フィールド <full-> の値 (文字列) を代入する - (macro.assign.html)
変数 $0 に擬似フィールド <html> の値 (文字列) を代入する - (macro.assign.from+)
変数 $0 に擬似フィールド <from+> の値 (文字列) を代入する - (macro.assign.from)
変数 $0 に擬似フィールド <from> の値 (文字列) を代入する - (macro.assign.sender)
変数 $0 に擬似フィールド <sender> の値 (文字列) を代入する - (macro.assign.reply-to)
変数 $0 に擬似フィールド <reply-to> の値 (文字列) を代入する - (macro.assign.return-path)
変数 $0 に擬似フィールド <return-path> の値 (文字列) を代入する - (macro.assign.to+)
変数 $0 に擬似フィールド <to+> の値 (文字列) を代入する - (macro.assign.to)
変数 $0 に擬似フィールド <to> の値 (文字列) を代入する - (macro.assign.cc)
変数 $0 に擬似フィールド <cc> の値 (文字列) を代入する - (macro.assign.filename)
変数 $0 に擬似フィールド <filename> の値 (文字列) を代入する - (macro.assign.filename-zip)
変数 $0 に擬似フィールド <filename-zip> の値 (文字列) を代入する - (macro.assign.filename-7ze)
変数 $0 に擬似フィールド <filename-7ze> の値 (文字列) を代入する - (macro.assign.source)
変数 $0 に擬似フィールド <source> の値 (文字列) を代入する
- (macro.lookup.hostname)
識別条件に該当する Received:、X-Received: に記録されている
グローバルIPアドレスに対して逆引き (IPv4→ホスト名) を実行、
その結果 (ホスト名) を変数 $0 に代入する
(ネット接続が必要)
※(macro.lookup.hostname) は
到着から 15 日以内のメールを逆引き対象とします。
※逆引き対象の Received:、X-Received: には
接続元のグローバルIPアドレス (IPv4) の記録が必要です。
※キーワードには逆引き対象の
Received:、X-Received: の識別条件を入力します。
通常は Received: の "by ホスト名" を入力すれば十分です。
→ 入力例 [by mx.example.jp]
→ 入力例 [*by mx??.example.jp*] … ワイルドカード ON
なお、キーワードが [* by *] の場合、
SPF / Sender ID 自動検証の除外条件が適用されます。
※巡回先に他のアカウントで受け取ったメールが含まれていて、
それら (転送メール等) については元アカウントの
Received: を逆引き対象としたい場合、
論理演算子を ON に設定、[元アカウント用→巡回先用] の順に
識別条件を入力する必要があります。
→ 入力例 [*by fw??.example.com*||*by mx??.example.jp*]
… fw??.example.com が元アカウントのホスト名、
mx??.example.jp が巡回先のホスト名
※(macro.lookup.hostname) は
変数 $0 に以下の値 (逆引き結果) を代入します。
逆引き不能 … "error;0" (Received: の識別に失敗)
逆引き不能 … "error;1" (Received: の解析に失敗)
逆引き失敗 … "error;2"
逆引き無効 … "unknown"
逆引き成功 … 逆引き結果 (ホスト名)
- (macro.authentication.results)
識別条件に該当する Received:、X-Received: に記録されている
グローバルIPアドレスを対象に送信ドメイン認証の検証を実行、
その結果を Authentication-Results: 形式で変数 $0 に代入する
(ネット接続が必要)
※(macro.authentication.results) が検証対象とする
送信ドメイン認証は SPF / Sender ID です。
その他の送信ドメイン認証には対応していません。
※(macro.authentication.results) は
到着から 15 日以内のメールをを検証対象とします。
※検証対象の Received:、X-Received: には
接続元のグローバルIPアドレス (IPv4) の記録が必要です。
※キーワードには検証対象の
Received:、X-Received: の識別条件を入力します。
通常は Received: の "by ホスト名" を入力すれば十分です。
→ 入力例 [by mx.example.jp]
→ 入力例 [*by mx??.example.jp*] … ワイルドカード ON
なお、キーワードが [* by *] の場合、
SPF / Sender ID 自動検証の除外条件が適用されます。
※巡回先に他のアカウントで受け取ったメールが含まれていて、
それら (転送メール等) については元アカウントの
Received: を検証対象としたい場合、
論理演算子を ON に設定、[元アカウント用→巡回先用] の順に
識別条件を入力する必要があります。
→ 入力例 [*by fw??.example.com*||*by mx??.example.jp*]
… fw??.example.com が元アカウントのホスト名、
mx??.example.jp が巡回先のホスト名
※(macro.authentication.results) は
変数 $0 に以下の値 (検証結果) を代入します。
検証不能 … "error;0" (Received: の識別に失敗)
検証不能 … "error;1" (Received: の解析に失敗)
検証可能 … 検証結果 (Authentication-Results: 形式の値)
例) "easpam.localhost;
spf=pass smtp.mailfrom=user@example.com;
sender-id=pass header.From=user@example.com"
※SPF / Sender ID の認証結果は以下の通りです。
none … SPF レコードが公開されていない
neutral … SPF レコードが ? の条件に該当
pass … 認証に成功
fail … 認証に失敗
softfail … SPF レコードが ~ の条件に該当
temperror … 一時的な問題で認証処理に失敗
permerror … 永続的な問題で認証処理に失敗
※本機能は SPF レコードのマクロ機能をサポートしていません。
検証過程でマクロを検出した場合、temperror として扱います。
※本機能は IPv6 に対応していません。
SPF レコードの ip6 機構は無視します。
※本機能は SPF レコードの exp 修飾子をサポートしていません。
SPF レコードの exp 修飾子は無視します。
※SPF レコードが +all の条件に該当した場合、
認証結果は "pass (+all)" のように記述されます。(独自仕様)
※SPF レコードが ?all の条件に該当した場合、
認証結果は "neutral (?all)" のように記述されます。(独自仕様)
※認証結果が "pass" または "neutral" の場合、
0.0.0.0 (IPv4) を基準に SPF / Sender ID を再検証します。
その結果が本来の認証結果と一致する場合、
認証結果は "pass (zero)" または
"neutral (zero)" のように記述されます。(独自仕様)
※参考) SPF (Sender Policy Framework) : 迷惑メール対策委員会
http://salt.iajapan.org/wpmu/anti_spam/admin/tech/...
- (macro.save.$1) 〜 (macro.save.$9)
変数 $0 の値 (文字列) を $1 〜 $9 に代入する ($0 の退避) - (macro.load.$1) 〜 (macro.load.$9)
変数 $1 〜 $9 の値 (文字列) を $0 に代入する ($0 の復帰)
- (macro.regexp.Match)
変数 $0 を対象に正規表現 (検索) を実行、結果を $0 に代入する - (macro.regexp.Subst)
変数 $0 を対象に正規表現 (置換) を実行、結果を $0 に代入する - (macro.regexp.Trans)
変数 $0 を対象に正規表現 (変換) を実行、結果を $0 に代入する
※(macro.regexp.*) の正規表現 (キーワード) を評価する場合、
比較対象 (変数 $0) の改行コードは一旦 \n に変換されます。
(比較対象に \r は含まれない)
※評価後の結果に含まれる改行コードは \r\n に再変換されます。
※(macro.regexp.Match) の正規表現 (キーワード) の入力形式は
[/pattern1/options] または [m/pattern1/options] です。
※(macro.regexp.Subst) の正規表現 (キーワード) の入力形式は
[s/pattern1/pattern2/options] です。
※(macro.regexp.Trans) の正規表現 (キーワード) の入力形式は
[tr/pattern3/pattern4/options] です。
検証系ルールの仕様は以下の通りです。
- <macro.answer.Verify>
変数 $0 を対象に文字列の検証を実行する
※比較対象が変数 $0 に代入されている文字列である点を除けば、
キーワードの書式等は擬似フィールド <header> 等と同様です。
- <macro.answer.Compare>
演算子を使って、変数 $0 〜 $9 や定数を比較する
※<macro.answer.Compare> の比較式 (キーワード) の入力形式は
[(変数)演算子(変数または定数)修飾子] です。
※利用可能は変数は文字列型 $0 〜 $9、
整数型 i0 〜 i9 ($0 〜 $9 を 4 バイト整数値に変換)、
実数型 f0 〜 f9 ($0 〜 $9 を 4 バイト浮動小数点値に変換) です。
※利用可能な演算子は以下の通りです。
== … 左辺と右辺が等しい
!= … 左辺と右辺が等しくない
>= … 左辺が右辺以上
<= … 左辺が右辺以下
> … 左辺が右辺より大きい
< … 左辺が右辺より小さい
>> … 左辺に右辺が含まれる (文字列の比較専用)
<< … 左辺が右辺に含まれる (文字列の比較専用)
※利用可能な修飾子は以下の通りです。
i … 半角英字の大小を区別しない (文字列の比較専用)
r … 先頭末尾の空白文字を無視する (文字列の比較専用)
※文字列型の定数は "KEYWORD" のように対象文字列を "" で
括る必要があります。
また、整数型の定数は 1、実数型の定数は 0.8 のように
数値をそのまま入力します。
※原則として異なる型の変数、定数は比較できませんが、
左辺が実数型、右辺が整数型の定数の比較は可能です。
左辺が整数型、右辺が実数型の定数も比較できますが、
右辺の小数点以下は無視されます。
※文字列の大小は文字コード (Shift_JIS) の並びで比較されます。
※変数 $0 〜 $9 の内容 (文字列) が数値に変換できない場合、
整数型の比較、実数型の比較は不成立 (偽) となります。
※入力例)
[($0)<=("KEYWORD")] … $0 が KEYWORD 以下 (文字列の比較)
[($1)==($2)i] … $1 と $2 が一致 (英大小を区別しない)
[(i3)<(i4)] … i3 が i4 未満 (整数の比較)
[(f5)>=(0.8)] … f5 が 0.8 以上 (実数の比較)
[($0)>>("KEYWORD")] … $0 に KEYWORD が含まれる
[($0)>>($1)i] … $0 に $1 が含まれる (英大小を区別しない)
- 変数 $0 〜 $9 はテンプレート単位で照合開始毎に初期化されます。
テンプレートの先頭に (macro.clear) を配置する必要はありません。 - ルールの編集画面の [動作確認] は macro.* に対応していません。
テンプレートの編集画面の [テンプレートの動作確認] は
macro.* 系ルールが含まれているテンプレートに対応しています。 - macro.* 系ルールが含まれているインポートデータ (*.EXP) は
内部フィルタや転送フィルタにインポートできません。