フィルタのセットアップに関する詳細な情報が https://dojo.jp/xmail にあります。
XMail におけるフィルタは、メッセージの到着または送信をトリガーとして各種の特別な追加処理を行うための仕組みです。XMail のフィルタ機能は非常に強力で、これを利用することによりメッセージングサービスを大きく拡張することができます。
XMail のフィルタ機能は、オンラインで実行される(SMTP セッション中に実行される)ものとオフラインで(SMTP セッション終了後または開始前に)実行されるものとの区別があります。
オンライン処理は XMail が受信するすべてのメッセージに対して実行されます。一方、オフライン処理はローカルユーザあてのメッセージがそれぞれのメールボックスに格納されるその直前に、または外部へリレーされるメッセージの SMTP セッションが開始されるその直前に実行されます。
XMailCFG による拡張
XMailCFG では標準添付のオンラインフィルタとオフラインフィルタを利用することで XMail によるメールサービスに以下の機能を追加しています。
【SMTP RCPT 後処理】
(オンラインフィルタ)
【SMTP DATA 前処理】
(オンラインフィルタ)
【SMTP DATA 後処理】
(オンラインフィルタ)
【SMTP セッション後処理(インバウンド処理)】
(オフラインフィルタ)
【SMTP セッション開始前処理(アウトバウンド処理)】
(オフラインフィルタ)
オンラインフィルタ機能を利用するための準備作業
オンラインフィルタ処理である [SMTP RCPT 後処理] や [SMTP DATA 前処理]、[SMTP DATA 後処理] を実行するためには以下の作業が必要です。
[SMTP RCPT 後処理] や [SMTP DATA 前処理]、[SMTP DATA 後処理] のためのフィルタ定義ファイル、MailRoot/filters.post-rcpt.tab、MailRoot/filters.pre-data.tab、MailRoot/filters.post-data.tab が存在しなければ作成します。
フィルタ定義ファイル中にフィルタを起動するための定義行を以下のように指定します(複数行の指定が可能)。
"!フラグ" (tab) "起動コマンド" (tab) "引数" (tab) "引数" (tab) ‥‥‥(改行) |
フラグは省略できます。フラグを省略する場合、起動コマンドを先頭に記述します。フラグには aex、wlex があり、aex は SMTP 認証により SMTP サーバに接続したユーザに対してそのコマンド行を実行しないことを、wlex は [SMTP ホワイトリスト」に登録されているユーザ(IP アドレス)に対してそのコマンド行を実行しないことをそれぞれ指示します。複数のフラグを指定するときはカンマで区切ります。ただし、フラグ文字列の冒頭に識別文字として "!" を付加する必要があります。
指定例: "!aex,wlex" ......
起動コマンドは、OS の内部コマンドや外部コマンド、コンソールモードで動作するプログラムまたはスクリプトを指定することができ、たとえば Perl スクリプトを実行する場合は c:¥usr¥local¥bin¥perl.exe のように指定します。
引数は任意の回数繰り返すことができます。Perl スクリプトを実行する場合はスクリプトファイルのフルパスを最初の引数にします。引数として XMail 独自のマクロを含めることができます。サポートされるマクロは以下の通りです。
$(CRCPT) | 最後の RCPT TO: コマンドの値 |
$(FILE) | メッセージファイルのフルパス |
$(FROM) | MAIL FROM: コマンドの値 |
$(LOCALADDR) | メッセージを受信したローカル IP アドレスと TCP ポート番号 |
$(REMOTEADDR) | リモートホストの IP アドレスと TCP ポート番号 |
$(USERAUTH) | SMTP 認証時のユーザ名 |
なお、$(FILE) のようなマクロ表記は XMail 1.23 からのサポートで、後方互換のためそれまでの表記方法 @@FILE も引き続きサポートされています。
起動コマンドが戻り値として 3 をセットすると、XMail は SMTP クライアントに対して受信拒否を通知します。また、戻り値を 16 にした場合、フィルタ定義ファイル中に複数のコマンド行があってもそれ以降は実行されません。それ以外の戻り値ではそのまま SMTP セッションを継続します。
オフラインフィルタ機能を利用するための準備作業
オフラインフィルタ処理である [SMTP セッション後処理](インバウンド処理)または [SMTP セッション開始前処理](アウトバウンド処理)を実行するためには以下の作業が必要です。
[SMTP セッション後処理] または [SMTP セッション開始前処理] のためのフィルタ定義ファイル(MailRoot/filters.in.tab と MailRoot/filters.out.tab)に、目的とするフィルタを起動するためのパラメータを登録します。
一つの定義は以下の通りです。(1 行で 1 つの定義)
"送信者アドレス" (tab) "あて先アドレス" (tab) "リモートIPアドレス" (tab) "ローカルIPアドレス" (tab) "起動ファイル名" (改行) |
送信者アドレスやあて先アドレスには *@domain.com のようにワイルドカードを指定することができます。* のみを指定した場合、すべてのアドレスが対象となります。
IP アドレスは 0.0.0.0./0 や 192.168.1.0/24 のようにネットマスクを含めて書きます。
XMailCFG から作業を行う場合は引用符を入力する必要はありません。また、タブ文字の代わりにスペース文字が使えます。
複数の定義が行われた場合、[送信者アドレス]、[あて先アドレス]、[リモートIPアドレス]、[ローカルIPアドレス] がマッチするメッセージに対し、すべての定義が登録順に実行されます。
なお、[環境設定]-[XMailCFG 環境設定] を実行すると自動的に標準フィルタ(XMailCFG_common_in.tab と XMailCFG_common_out.tab)のためのパラメータが登録され、起動ファイルも自動作成されます。
フィルタ定義ファイルで指定した起動ファイルを XMail の MailRoot/filters フォルダ内に作成します。
起動ファイルを XMailCFG を使わずに作成する場合は、テキストエディタなどで以下のように作成します。(複数行の指定が可能)
"起動コマンド" (tab) "引数" (tab) "引数" (tab) ‥‥‥(改行) |
起動コマンドは、OS の内部コマンドや外部コマンド、コンソールモードで動作するプログラムまたはスクリプトを指定することができ、たとえば Perl スクリプトを実行する場合は c:¥usr¥local¥bin¥perl.exe のように指定します。
引数は任意の回数繰り返すことができます。Perl スクリプトを実行する場合はスクリプトファイルのフルパスを最初の引数にします。引数として XMail 独自のマクロを含めることができます。サポートされるマクロは以下の通りです。
$(FILE) | メッセージファイルのフルパス |
$(FROM) | MAIL FROM: コマンドの値 |
$(LOCALADDR) | メッセージを受信したローカル IP アドレスと TCP ポート番号 |
$(MSGID) | XMail によるメッセージ ID |
$(MSGREF) | SMTP メッセージ ID |
$(RCPT) | RCPT TO: コマンドの値 |
$(REMOTEADDR) | リモートホストの IP アドレスと TCP ポート番号 |
$(RFROM) | エイリアス表参照後の MAIL FROM: コマンドの値 |
$(RRCPT) | エイリアス表参照後の RCPT TO: コマンドの値 |
$(USERAUTH) | SMTP 認証時のユーザ名 |
なお、$(FILE) のようなマクロ表記は XMail 1.23 からのサポートで、後方互換のためそれまでの表記方法 @@FILE も引き続きサポートされています。
XMailCFG の標準フィルタで提供される機能を実際に利用するには、[ユーザの管理] や [リストの管理] などから個々のアカウントに対してそのためのオプションをオンにします。