擬似フィールド macro.*

擬似フィールド 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
    ※巡回先に他のアカウントで受け取ったメールが含まれていて、
     それら (転送メール等) については元アカウントの
     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
    ※巡回先に他のアカウントで受け取ったメールが含まれていて、
     それら (転送メール等) については元アカウントの
     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 が含まれる (英大小を区別しない)

  1. 変数 $0 〜 $9 はテンプレート単位で照合開始毎に初期化されます。
    テンプレートの先頭に (macro.clear) を配置する必要はありません。
  2. ルールの編集画面の [動作確認] は macro.* に対応していません。
    テンプレートの編集画面の [テンプレートの動作確認] は
    macro.* 系ルールが含まれているテンプレートに対応しています。
  3. macro.* 系ルールが含まれているインポートデータ (*.EXP) は
    内部フィルタ、転送フィルタにインポートできません。
上に戻る

Copyright (C) 2017 by eimei