Sun Java System Messaging Server 6 2005Q4 管理ガイド

Procedureユーザーレベルのフィルタをデバッグするには

手順
  1. fileinto フィルタを動作させるには、imta.cnf ファイル内で ims-ms チャネルが次のようにマークされていることを確認します。

    fileinto $u+$s@$d

  2. ユーザーの LDAP エントリからユーザーレベルのフィルタを取得します。

    ユーザーレベルのフィルタは、MailSieveRuleSource 属性の下のそれぞれの LDAP エントリに保存されています。ldapsearch コマンドを使用してこのフィルタを検索する際には、これらが base64 でエンコードされているため -Bo スイッチで出力をデコードする必要があることに注意してください。


    ./ldapsearch -D "cn=directory manager" -w password -b 
    "o=alcatraz.sesta.com,o=isp" -Bo uid=test

    次の手順で説明している imsimta test -rewrite コマンドも、自動的にフィルタをデコードします。

  3. ユーザーのフィルタが MTA から見えることを確認します。

    次のコマンドを発行します。

    # imsimta test -rewrite -filter -debug user@sesta.com

    これにより、前の手順で取得したユーザーの Sieve フィルタが出力されます。フィルタが見つからない場合は、LDAP エントリがそれらを返さない理由を調べる必要があります。imsimta test -rewrite の出力にフィルタが表示されていたら、ユーザーのフィルタが MTA から見えているということです。次に必要な処理は、imsimta test -expression コマンドを使用してフィルタの解釈をテストすることです。

  4. imsimta test -exp を使用して、ユーザーのフィルタをデバッグします。次に示す情報が必要です。

    1. ユーザーの mailSieveRuleSource 属性からの Sieve 言語ステートメント。前述の手順を参照してください。

    2. フィルタをトリガするはずだった rfc2822 メッセージ。

    3. フィルタがメッセージに対してどのような処理を行うべきだったかという説明。

  5. テキストファイルを作成します (temp.filter など)。このファイルには、ユーザーの mailSieveRuleSource: の値に基づいた Sieve 言語ステートメントを格納します。次に例を示します。

    require "fileinto";
    if anyof(header :contains
    ["To","Cc","Bcc","Resent-to","Resent-cc", 
       "Resent-bcc"] "commsqa"){ 
       fileinto "QMSG";
    }

    期待される結果: commsqa がこのメッセージの受取人である場合は、メッセージを QMSG というフォルダにファイリングします。

  6. ユーザーによって指定される rfc2822 メッセージファイルの内容を含む、test.msg という名前のテキストファイルを作成します。

    ユーザーのメッセージストア領域から .msg ファイルを使用するか、あるいはユーザーによって指定される rfc2822 メッセージファイルの内容を含む test_rfc2822.msg というテキストファイルを作成することができます。

  7. imsimta test -exp コマンドを使用します。


    # imsimta test -exp -mm -block -input=temp.filter -message=test_rfc2822.msg
    
  8. 出力を確認します。

    imsimta test -exp コマンドの最後の行は、Sieve 解釈の結果を示します。結果は次のようになります。


    Sieve Result: [] 
    または 
    Sieve Result: [action]
    

    action は、Sieve フィルタを適用した結果としてこのメッセージに実行されたアクションです。

    フィルタの条件に一致した場合、結果としていくつかのアクションが表示されます。一致するものがない場合、Sieve 結果は空白となり、Sieve フィルタに論理上のエラーがあるか、または .msg ファイルに一致する情報が含まれていないかのどちらかです。ほかのエラーが発生している場合は、Sieve スクリプトファイルに構文エラーがあるので、デバッグする必要があります。

    出力の詳細については、「imsimta test -exp Output」を参照してください。

  9. フィルタが構文的に有効で結果が正しい場合、次に必要な処理は tcp_local_slave.log デバッグログファイルを調べることです。

    テストしたメッセージファイルと送信されているメッセージファイルが同一でない可能性があります。受信しているメッセージを確認する唯一の方法は、tcp_local_slave.log ファイルを調べることです。このログには、MTA に送信されている正確なメッセージと、メッセージに対してフィルタがどのように適用されているかが表示されます。

    tcp_local_slave.log デバッグファイルの入手の詳細については、「デバッグのキーワード」slave_debug キーワードを参照してください。