Thunderbird のメッセージフィルタ
2008-01-11


Thunderbird (Icedove) 2.0.0.9 のメッセージフィルタ機能において設定した フィルタは msgFilterRules.dat に保存されるけど、このファイルに書き出す処理が 変な気がする。

msgFilterRules.dat から .procmailrc に変換するスクリプトでも書こうと、 msgFilterRules.dat のフォーマットを調べているあいだに変な点にでくわした。

「フィルタの設定」のダイアログで、たとえば、

[件名] [に含む] [word]

と書くと、msgFilterRules.dat の対応する行には

condition="OR (subject,contains,word)"

と出力される。

[件名] [に含む] [word1 (word2) word3]

のように、文字列中に ')' という文字を含まれるようにしてみると、

condition="OR (subject,contains,\"word1 (word2) word3\")"

となる。また、

[件名] [に含む] [word1 "word2" word3]

condition="OR (subject,contains,word1 \\"word2\\" word3)"

となる。さてここで、

[件名] [に含む] [word1 \" word2]

としてみると、

condition="OR (subject,contains,word11 \\\"word2)"

となる。バックスラッシュの数が何か変。Thunderbird を再起動し、 このように書き出された msgFilterRules.dat を読みこませると、

フィルタの定義ファイル msgFilterRules.dat が壊れてします。
古い定義ファイルの名前を rulesbackup.dat に変更し、新しい
フィルタ定義ファイルを作成します。

というエラーが出て、フィルタの一覧がクリアされてしまう。Thunderbird を終了し、 rulesbackup.dat をふたたび msgFilterRules.dat として戻し、

condition="OR (subject,contains,word11 \\\\"word2)"

と手で修正すると正常にダイアログは表示され、該当文字列は入力した とおりに戻っている。

mailnews/base/search/src/nsMsgSearchTerm.cpp の nsresult nsMsgSearchTerm::OutputValue(nsCString &outputStr) あたりが怪しい。

[プログラミング]

コメント(全2件)


記事を書く
powered by ASAHIネット