fileinto フィルタを動作させるには、imta.cnf ファイル内で ims-ms チャネルが次のようにマークされていることを確認します。
fileinto $u+$s@$d
ユーザーの LDAP エントリからユーザーレベルのフィルタを取得します。
ユーザーレベルのフィルタは、MailSieveRuleSource 属性の下のそれぞれの LDAP エントリに保存されています。ldapsearch コマンドを使用してこのフィルタを検索する際には、これらが base64 でエンコードされているため -Bo スイッチで出力をデコードする必要があることに注意してください。
./ldapsearch -D "cn=directory manager" -w password -b "o=alcatraz.sesta.com,o=isp" -Bo uid=test |
ユーザーのフィルタが MTA から見えることを確認します。
次のコマンドを発行します。
# imsimta test -rewrite -filter -debug user@sesta.com
これにより、前の手順で取得したユーザーの Sieve フィルタが出力されます。フィルタが見つからない場合は、LDAP エントリがそれらを返さない理由を調べる必要があります。imsimta test -rewrite の出力にフィルタが表示されていたら、ユーザーのフィルタが MTA から見えているということです。次に必要な処理は、imsimta test -expression コマンドを使用してフィルタの解釈をテストすることです。
テキストファイルを作成します (temp.filter など)。このファイルには、ユーザーの mailSieveRuleSource: の値に基づいた Sieve 言語ステートメントを格納します。次に例を示します。
require "fileinto"; if anyof(header :contains ["To","Cc","Bcc","Resent-to","Resent-cc", "Resent-bcc"] "commsqa"){ fileinto "QMSG"; }
期待される結果: commsqa がこのメッセージの受取人である場合は、メッセージを QMSG というフォルダにファイリングします。
ユーザーによって指定される rfc2822 メッセージファイルの内容を含む、test.msg という名前のテキストファイルを作成します。
ユーザーのメッセージストア領域から .msg ファイルを使用するか、あるいはユーザーによって指定される rfc2822 メッセージファイルの内容を含む test_rfc2822.msg というテキストファイルを作成することができます。
imsimta test -exp コマンドを使用します。
# imsimta test -exp -mm -block -input=temp.filter -message=test_rfc2822.msg |
出力を確認します。
imsimta test -exp コマンドの最後の行は、Sieve 解釈の結果を示します。結果は次のようになります。
Sieve Result: [] または Sieve Result: [action] |
action は、Sieve フィルタを適用した結果としてこのメッセージに実行されたアクションです。
フィルタの条件に一致した場合、結果としていくつかのアクションが表示されます。一致するものがない場合、Sieve 結果は空白となり、Sieve フィルタに論理上のエラーがあるか、または .msg ファイルに一致する情報が含まれていないかのどちらかです。ほかのエラーが発生している場合は、Sieve スクリプトファイルに構文エラーがあるので、デバッグする必要があります。
出力の詳細については、「imsimta test -exp Output」を参照してください。
フィルタが構文的に有効で結果が正しい場合、次に必要な処理は tcp_local_slave.log デバッグログファイルを調べることです。
テストしたメッセージファイルと送信されているメッセージファイルが同一でない可能性があります。受信しているメッセージを確認する唯一の方法は、tcp_local_slave.log ファイルを調べることです。このログには、MTA に送信されている正確なメッセージと、メッセージに対してフィルタがどのように適用されているかが表示されます。
tcp_local_slave.log デバッグファイルの入手の詳細については、「デバッグのキーワード」の slave_debug キーワードを参照してください。