xmail.dojo.jp
 フィルタの管理
フィルタの管理

XMail にはメッセージの到着または送信をトリガーとして外部プログラムを起動し、さまざまな追加処理を行うための機能があり、これを総称して XMailCFG ではフィルタ処理と呼んでいます。XMailCFG には XMail によるメッセージングサービスを大きく拡張するためのさまざまなフィルタ用スクリプト群が含まれています。

なお、XMail 1.14 以降とそれより前のバージョンとではフィルタ処理の仕様が異なっています。本ページでは XMail 1.14 以降の実装について説明しています。


フィルタ処理の概要


XMail/XMailCFG におけるフィルタ処理の概要は以下の通りです。

■処理の大まかな流れ

SMTP クライアントが XMail に接続してからそのメッセージが最終的にローカルユーザのメールボックスに格納されるか、あるいは他のメールサーバに転送されるまでに行なわれるフィルタ関連処理の流れは以下のようになります。

  1. SMTP クライアントが XMail に接続し、インバウンド SMTP セッションが開始されます。

  2. SMTP セッション継続中 - SMTP RCPT 後処理
    SMTP クライアントが RCPT TO:コマンドを送信してきたその直後に XMail は "SMTP RCPT 後処理" のための設定を確認し、適切な設定があればそれを実行します。実行されたフィルタコマンドは XMail に対して SMTP セッションをそのまま続けるかそこで強制終了するかを指示することができます。

  3. SMTP セッション継続中 - SMTP DATA 前処理
    SMTP クライアントが DATA コマンドを送信してきたその直後に XMail は "SMTP DATA 前処理" のための設定を確認し、適切な設定があればそれを実行します。実行されたフィルタコマンドは XMail に対して SMTP セッションをそのまま続けるかそこで強制終了するかを指示することができます。

  4. SMTP セッション継続中 - SMTP DATA 後処理
    SMTP クライアントによるメッセージ本体の送信が完了したその直後に XMail は "SMTP DATA 後処理" のための設定を確認し、適切な設定があればそれを実行します。 実行されたフィルタコマンドは XMail に対して SMTP セッションをそのまま続けるかそこで強制終了するかを指示することができます。

  5. インバウンド SMTP セッションが終了し、すべてのオンラインフィルタ処理が終了します。引き続き XMail はオフラインフィルタ処理のための準備をします。

  6. 到着メッセージがローカルユーザあての場合、XMail は "SMTP セッション終了後処理" のための設定を確認し、適切な設定があればそれを実行します。実行されたフィルタコマンドは XMail に対して到着メッセージをそのままローカルユーザのメールボックスに格納するか、あるいは削除するかを指示することができます。

  7. 到着メッセージが外部ユーザあての場合、XMail は "SMTP セッション開始前処理" のための設定を確認し、適切な設定があればそれを実行します。実行されたフィルタコマンドは XMail に対してそのメッセージを削除するか、あるいはそのまま転送のための SMTP セッションを開始するかを指示することができます。

■個別処理の実行手順

SMTP RCPT 後処理などのオンラインフィルタや SMTP セッション終了後処理などのオフラインフィルタは、個々には以下のように実行されます。

  1. 個々のフィルタは XMail 固有のフィルタ定義ファイルから検索され、起動されます。ただし、オフラインフィルタについてはフィルタ定義ファイルからさらにフィルタ起動ファイルが検索され、そこから実際のコマンドが起動されます。

    フィルタ定義ファイルやフィルタ起動ファイルが見つからない場合、XMail はフィルタ処理をそこで終了します。

    "SMTP RCPT 後処理" の場合、XMail の MailRoot/filters.post-rcpt.tab がフィルタ定義ファイルです。XMail はこのファイルを検索し、そこに記述のあるコマンドを実行します。

    "SMTP DATA 前処理" の場合、XMail の MailRoot/filters.pre-data.tab がフィルタ定義ファイルです。XMail はこのファイルを検索し、そこに記述のあるコマンドを実行します。

    "SMTP DATA 後処理" の場合、XMail の MailRoot/filters.post-data.tab がフィルタ定義ファイルです。XMail はこのファイルを検索し、そこに記述のあるコマンドを実行します。

    "SMTP セッション終了後処理" の場合、XMail の MailRoot/filters.in.tab がフィルタ定義ファイルです。XMail はこのファイルを検索し、そこに記述のあるフィルタ起動ファイルをさらに MailRoot/filters フォルダ内から検索し、そこに記述のあるコマンドを実行します。

    "SMTP セッション開始前処理" の場合、XMail の MailRoot/filters.out.tab がフィルタ定義ファイルです。XMail はこのファイルを検索し、そこに記述のあるフィルタ起動ファイルをさらに MailRoot/filters フォルダ内から検索し、そこに記述のあるコマンドを実行します。

  2. フィルタ定義ファイルまたはフィルタ起動ファイル中に有効なコマンド行が存在する場合、それらのコマンドが定義順に実行されます。コマンドは終了時に戻り値をセットすることができ、それに応じて XMail はメッセージファイルをどう扱うかとフィルタ処理を続行するかどうかを決定します。

  3. フィルタ処理が最終的に終了します。フィルタ処理により廃棄されなかったメッセージは次の処理ステップに進みます。

■フィルタ処理でできること

XMail のフィルタ実行機能は極めて強力で、メッセージ内の検索や加工・編集、廃棄だけでなく、メールシステムとは直接関係のない他のプログラムの起動・終了など、コマンドモードで実行できることならほとんどどんなことでも自由自在です。

XMailCFG では以下の機能をフィルタ機能によって実現しています。

【インバウンド処理】
  • 自動応答 (SMTP セッション終了後処理)
  • お知らせメール (SMTP セッション終了後処理)
  • 添付ファイル削除 (SMTP セッション終了後処理)
  • 受信制限(受信許可) (SMTP セッション終了後処理)
  • 受信拒否 (SMTP セッション終了後処理)
  • 受信ロギング (SMTP セッション終了後処理)
  • Message-Id: ヘッダタグの付加 (SMTP セッション終了後処理)
  • Subject: ヘッダタグの加工(マクロの付加) (SMTP セッション終了後処理)
  • From: ヘッダタグの固定(置換) (SMTP セッション終了後処理)
  • Reply-To: ヘッダタグの付加 (SMTP セッション終了後処理)
  • ヘッダ/フッタ付加 (SMTP セッション終了後処理)
  • スパムに対するコンテンツフィルタリング (SMTP セッション終了後処理)
  • リストプロセッサ (SMTP セッション終了後処理)
  • ウイルススキャン (SMTP DATA 後処理または SMTP セッション終了後処理)
  • メッセージ到着の LAN 内コンピュータへの通知 (SMTP セッション終了後処理)
  • 【アウトバウンド処理】
  • 送信者(From:)アドレスによる SMTP リレー許可 (SMTP セッション開始前処理)
  • スパムに対するコンテンツフィルタリング (SMTP セッション開始前処理)
  • ウイルススキャン (SMTP セッション開始前処理)
  • ■使用できる実行コマンド

    フィルタ定義ファイルまたはフィルタ起動ファイルから実行するコマンドには、コンソールモードで動作するほとんどすべてのプログラムまたはスクリプトを使うことができます。たとえば、OS がサポートするコマンドやサードパーティのツール、ユーティリティなどが使えます。

    XMailCFG の標準フィルタは Perl スクリプトを ActivePerl から実行しています。

      Top ↑

    フィルタ機能を利用するには


    XMail のフィルタ機能を利用するための具体的な方法は以下の通りです。

    ■XMailCFG の標準フィルタを利用

    XMailCFG でサポートされるフィルタ機能を利用可能にするためには、たんに [環境設定]-[XMailCFG 環境設定] を実行するだけです。 これにより、 自動応答、お知らせメール、添付ファイル削除、受信拒否、受信ロギング、Message-Id:付加、Subject:タグ付加、Reply-To:付加、ヘッダ/フッタ付加、スパムに対するコンテンツフィルタリング、リストプロセッサ、ウイルススキャンなど、XMailCFG の標準フィルタにより提供される機能が利用可能になります。

    ■カスタムフィルタをセットアップ

    XMailCFG で提供されない機能を追加したい場合、[フィルタの管理] メニューを利用することができます(詳細は後述)。

      Top ↑

    SMTP RCPT 後処理


    SMTP クライアントと XMail との SMTP セッションにおいて、クライアントが RCPT TO: コマンドを送信してきた直後に行なわれるのが "SMTP RCPT 後処理" です。

    "SMTP RCPT 後処理" では XMail のフィルタ定義ファイル MailRoot/filters.post-rcpt.tab 内に記述されたコマンド(群)を実行します。以下はその定義ファイルに登録される XMailCFG の標準フィルタです。

    SMTP RCPT 後処理

    上のサンプルは ActivePerl を C:\usr\perl に、XMailCFG を C:\pub\xmailcfg にそれぞれにインストールした場合のものです。また、"状態" が "オフ" なので、この定義行は実際には実行されません。

    ただし、"SMTP RCPT 後処理" 用の XMailCFG の標準フィルタ filters.post-rcpt.cgi には有効なスクリプトの記述はありません。ユーザ定義のスクリプトを記述し、"状態" を "オン" にすればそれは実行されますが、XMailCFG のアップデートなどで追加スクリプトの保守に手がかかるので、ユーザ定義の追加フィルタについては [カスタム定義の追加] を利用し、MailRoot/filters.post-rcpt.tab に新たな定義を追加することすすめます。

    ■カスタム定義の追加

    "SMTP RCPT 後処理" 機能を利用してユーザ定義のフィルタを実行する場合は以下のようにします。

    1. 必要に応じ実行フラグを選択します。ただし、"wlex" フラグは XMail 1.23 以降のサポートです。

    2. 起動コマンドは、OS の内部コマンドや外部コマンド、コンソールモードで動作するプログラムまたはスクリプトを指定することができます。Perl スクリプトを実行する場合は起動コマンドを c:\usr\local\bin\perl.exe のように指定します。

    3. 引数は任意の個数を指定できますが、複数の引数がある場合は [最初の引数] と [その他の引数] とに分けて指定してください。Perl スクリプトを実行する場合、[最初の引数] にスクリプトファイルのフルパスを指定し、残りを [その他の引数] にタブまたはスペースで区切って指定します。

      SMTP RCPT 後処理を含むオンラインフィルタ機能では以下のマクロ文字列がサポートされます。マクロは、コマンドを実行するときにそれらの引数として所定の情報を渡すためにあります。以下のマクロのうち、@@xxx のように @@ から始まるものは XMail 1.22 まででサポートされていた形式で、新しいバージョンでも引き続きサポートされています。

      $(FROM) または @@FROM
      フィルタの実行にあたり、メッセージの送信者アドレス(SMTP セッション時の MAIL FROM: の値)に置換されます。

      $(RCPT) または @@CRCPT
      フィルタの実行にあたり、メッセージのあて先アドレス(SMTP セッション時の RCPT TO: の値)に置換されます。

      $(FILE) または @@FILE
      フィルタの実行にあたり、メッセージファイルのディスク上の絶対パスに置換されます。

      $(USERAUTH) または @@USERAUTH
      フィルタの実行にあたり、SMTP 認証時のユーザ ID に置換されます。

      $(REMOTEADDR) または @@REMOTEADDR
      フィルタの実行にあたり、SMTP クライアントの IP アドレスと TCP ポート番号に置換されます。

      $(LOCALADDR) または @@LOCALADDR
      フィルタの実行にあたり、XMail 側の受け付けインターフェースの IP アドレスと TCP ポート番号に置換されます。

    4. [実行する] ボタンで、新しい定義が XMail のフィルタ定義ファイル MailRoot/filters.post-rcpt.tab に追加され、それは直ちに有効になります。

      Top ↑

    SMTP DATA 前処理


    SMTP クライアントと XMail との SMTP セッションにおいて、クライアントが DATA コマンドを送信してきた直後に行なわれるのが "SMTP DATA 前処理" です。

    "SMTP DATA 前処理" では XMail のフィルタ定義ファイル MailRoot/filters.pre-data.tab 内に記述されたコマンド(群)を実行します。以下はその定義ファイルに登録される XMailCFG の標準フィルタと追加定義の一例です。

    SMTP DATA 前処理

    上のサンプルは ActivePerl を C:\usr\perl に、XMailCFG を C:\pub\xmailcfg にそれぞれにインストールした場合のものです。また、追加定義は、XMail の関連ツールであるアンチ・スパムフィルタ GLST を C:\usr\xmail\mailroot\bin にインストールした場合のものです。

    "SMTP DATA 前処理" 用の XMailCFG の標準フィルタ filters.pre-data.cgi にユーザ定義のスクリプトを記述すればそれは実行されますが、XMailCFG のアップデートなどで追加スクリプトの保守に手がかかるので、ユーザ定義の追加フィルタについては [カスタム定義の追加] を利用し、MailRoot/filters.pre-data.tab に新たな定義を追加することすすめます。

    カスタム定義の追加やマクロ機能については "SMTP RCPT 後処理" の場合と同じです。

      Top ↑

    SMTP DATA 後処理


    SMTP クライアントと XMail との SMTP セッションにおいて、クライアントからのメッセージ本体の送信が完了したその直後に行なわれるのが "SMTP DATA 後処理" です。

    "SMTP DATA 後処理" では XMail のフィルタ定義ファイル MailRoot/filters.post-data.tab 内に記述されたコマンド(群)を実行します。以下はその定義ファイルに登録される XMailCFG の標準フィルタです。

    SMTP DATA 後処理

    上のサンプルは ActivePerl を C:\usr\perl に、XMailCFG を C:\pub\xmailcfg にそれぞれにインストールした場合のものです。

    "SMTP DATA 後処理" 用の XMailCFG の標準フィルタ filters.post-data.cgi にユーザ定義のスクリプトを記述すればそれは実行されますが、XMailCFG のアップデートなどで追加スクリプトの保守に手がかかるので、ユーザ定義の追加フィルタについては [カスタム定義の追加] を利用し、MailRoot/filters.post-data.tab に新たな定義を追加することすすめます。

    カスタム定義の追加やマクロ機能については "SMTP RCPT 後処理" の場合と同じです。

      Top ↑

    SMTP セッション終了後処理


    SMTP クライアントと XMail との間で SMTP セッションが終了し、到着メッセージをローカルユーザのメールボックスに格納するその直前に行なわれるのが "SMTP セッション終了後処理" です。

    "SMTP セッション終了後処理" では XMail のフィルタ定義ファイル MailRoot/filters.in.tab 内に記述されたフィルタ起動に関する定義を読み込み、そこからさらに MailRoot/filters フォルダ内にあるフィルタコマンド(群)を実行します。以下は filters.in.tab に登録される XMailCFG の標準フィルタ定義です。

    SMTP セッション終了後処理(1)

    このフィルタ定義では、すべての SMTP クライアントからのすべての MAIL FROM: アドレスやすべての RCPT TO: アドレスのメッセージを XMailCFG の標準フィルタを起動するためのファイル MailRoot/filters/XMailCFG_common_in.tab から起動することを指定しています。

    "起動ファイル" 名をクリックすると、フィルタ起動ファイル MailRoot/filters/XMailCFG_common_in.tab の内容を見ることができます。

    SMTP セッション終了後処理(2)

    このサンプルは ActivePerl を C:\usr\perl に、XMailCFG を C:\pub\xmailcfg にそれぞれにインストールした場合のものです。

    "SMTP セッション終了処理" 用の XMailCFG の標準フィルタ filters.in.cgi にユーザ定義のスクリプトを記述すればそれは実行されますが、XMailCFG のアップデートなどで追加スクリプトの保守に手がかかるので、ユーザ定義の追加フィルタについては [カスタム定義の追加] を利用して MailRoot/filters.in.tab に新たな定義を追加し、さらに MailRoot/filters フォルダ内に新たに起動ファイルを作成することすすめます。

    なお、"自動応答" や "お知らせメール"、"添付ファイル削除"、"受信制限(受信許可)"、"受信拒否"、"受信ロギング"、"Message-Id: ヘッダタグの付加"、"Subject: ヘッダタグの加工(マクロの付加)"、"From: ヘッダタグの固定(置換)"、"Reply-To: ヘッダタグの付加"、"ヘッダ/フッタ付加"、"スパムに対するコンテンツフィルタリング"、"リストプロセッサ"、"ウイルススキャン"、"メッセージ到着の LAN 内コンピュータへの通知" などはすでに XMailCFG の標準フィルタ filters.in.cgi に搭載されています。

    ■カスタム定義の追加

    "SMTP セッション終了後処理" 機能を利用してユーザ定義のフィルタを実行する場合は以下のようにします。

    1. 送信者アドレス(MAIL FROM:)やあて先アドレス(RCPT TO:)の指定では *@domain.com のようにワイルドカードを指定することができます。* のみを指定した場合、すべてのあて先が対象となります。

    2. SMPT クライアントの IP アドレス(リモート IP) や XMail の IP アドレス(ローカル IP)は 0.0.0.0./0 や 192.168.1.0/24 のようにネットマスクを含めて書きます。何も指定しなければ 0.0.0.0/0 を指定したものとみなされます。

    3. 起動ファイル名は OS のファイルシステムで扱える任意の名前にできますが、日本語は使えず、また拡張子は必ず .tab にしなければなりません。

    4. 起動コマンドや引数はすべてダブルクオート(")でくくり、タブまたは半角スペースで区切ります。引数には XMail 独自のマクロを含めることができます(後述)。

    5. [追加する] ボタンでフィルタ定義ファイル MailRoot/filters.in.tab に新たな定義が追加され、MailRoot/filters フォルダ内にフィルタ起動ファイルが新規作成されます。既存のフィルタ起動ファイルがあった場合は上書きされます。

    ■SMTP セッション終了後処理で使えるマクロ

    SMTP セッション終了後処理を含むオフラインフィルタ機能では以下のマクロ文字列がサポートされます。マクロは、コマンドを実行するときにそれらの引数として所定の情報を渡すためにあります。以下のマクロのうち、@@xxx のように @@ から始まるものは XMail 1.22 まででサポートされていた形式で、新しいバージョンでも引き続きサポートされています。

    $(FROM) または @@FROM
    フィルタの実行にあたり、メッセージの送信者アドレス(SMTP セッション時の MAIL FROM: の値)に置換されます。

    $(RFROM) または @@RFROM
    フィルタの実行にあたり、メッセージの送信者がローカルユーザのエイリアス名である場合にその本当の送信者アドレスに置換されます。

    $(RCPT) または @@RCPT
    フィルタの実行にあたり、メッセージのあて先アドレス(SMTP セッション時の RCPT TO: の値)に置換されます。

    $(RRCPT) または @@RRCPT
    フィルタの実行にあたり、メッセージのあて先アドレスがローカルユーザのエイリアス名である場合にその本当のあて先アドレスに置換されます。

    $(REMOTEADDR) または @@REMOTEADDR
    フィルタの実行にあたり、SMTP クライアントの IP アドレスと TCP ポート番号に置換されます。

    $(LOCALADDR) または @@LOCALADDR
    フィルタの実行にあたり、XMail 側の受け付けインターフェースの IP アドレスと TCP ポート番号に置換されます。

    $(FILE) または @@FILE
    フィルタの実行にあたり、メッセージファイルのディスク上の絶対パスに置換されます。

    $(MSGID) または @@MSGID
    フィルタの実行にあたり、XMail が生成したメッセージの識別番号(ID)に置換されます。

    $(MSGREF) または @@MSGREF
    フィルタの実行にあたり、メッセージの識別番号のリファレンス値に置換されます。

    $(TMPFILE) または @@TMPFILE
    フィルタの実行にあたり、メッセージファイルのテンポラリファイル名に置換されます。

    $(USERAUTH) または @@USERAUTH
    フィルタの実行にあたり、SMTP 認証時のユーザ ID に置換されます。

      Top ↑

    SMTP セッション開始前処理


    SMTP クライアントと XMail との間で SMTP セッションが終了し、到着メッセージを外部へ転送するその直前に行なわれるのが "SMTP セッション開始前処理" です。

    "SMTP セッション開始前処理" では XMail のフィルタ定義ファイル MailRoot/filters.out.tab 内に記述されたフィルタ起動に関する定義を読み込み、そこからさらに MailRoot/filters フォルダ内にあるフィルタコマンド(群)を実行します。以下は filters.out.tab に登録される XMailCFG の標準フィルタ定義です。

    SMTP セッション開始前処理(1)

    このフィルタ定義では、すべての SMTP クライアントからのすべての MAIL FROM: アドレスやすべての RCPT TO: アドレスのメッセージを XMailCFG の標準フィルタを起動するためのファイル MailRoot/filters/XMailCFG_common_out.tab から起動することを指定しています。

    "起動ファイル" 名をクリックすると、フィルタ起動ファイル MailRoot/filters/XMailCFG_common_out.tab の内容を見ることができます。

    SMTP セッション開始前処理(2)

    このサンプルは ActivePerl を C:\usr\perl に、XMailCFG を C:\pub\xmailcfg にそれぞれにインストールした場合のものです。

    "SMTP セッション開始前処理" 用の XMailCFG の標準フィルタ filters.out.cgi にユーザ定義のスクリプトを記述すればそれは実行されますが、XMailCFG のアップデートなどで追加スクリプトの保守に手がかかるので、ユーザ定義の追加フィルタについては [カスタム定義の追加] を利用して MailRoot/filters.out.tab に新たな定義を追加し、さらに MailRoot/filters フォルダ内に新たに起動ファイルを作成することすすめます。

    なお、"送信者(From:)アドレスによる SMTP リレー許可"、"スパムに対するコンテンツフィルタリング"、"ウイルススキャン" などはすでに XMailCFG の標準フィルタ filters.out.cgi に搭載されています。

    ■カスタム定義の追加、マクロについて

    "SMTP セッション開始前処理" 機能を利用してユーザ定義のフィルタを実行する場合やマクロ指定については "SMTP セッション終了後処理" の場合と同じです。

      Top ↑

    フィルタのオン/オフ


    [フィルタの管理] メニューのサブメニュー [フィルタのオン/オフ] を利用すると、XMailCFG によるフィルタ処理そのものをオン/オフすることができます。

    フィルタ処理はコンピュータに高い負荷をかける場合があるため、フィルタをオフにすると XMail によるサービスのパフォーマンスが向上します。

    フィルタのオン/オフ


      Top ↑
    Copyright(c) xmail.dojo.jp.
    All rights reserved.