SyntaxHighlighter

2010/01/05

procmailで日本語サブジェクトの振り分け

procmailで日本語のサブジェクトの振り分けがうまく動いていないことがあり、その原因を調べた。

問題は、二つあった。

一つは、CentOS(システムはutf8)上で、.procmailrcをEUC、nkfで変換するコードをEUCにしていたつもりだったのだが、これがどうもgrepでマッチできていなかったように思える。
試しに、.procmailrcをutf8、nkfで変換するコードをutf8にしたらgrepでマッチさせることができた。

二つ目の問題は、grepで先頭を表すキャレット'^'を使うと、どうもprocmail経由ではマッチさせることができない。途中のデータをファイルに落として、そのデータに対して手動でgrepをかけると先頭の検出ができる。しかし、procmail経由で実行した場合には先頭検出ができなかった。原因は不明。しかし、空白文字を省くと使用できることがわかった。

結果として、現在は下記のような設定にしている:
:0
* ^Subject:[<空白><タブ>]*\/.*
* ? echo "$MATCH" | nkf -mZ1 --utf8 | sed -e's/[<空白>\t]//g' | grep '^キーワード'
.振り分けフォルダ/
ただし、
  • <空白>は半角空白文字、<TAB>はタブ文字を表す。
  • キーワードは空白文字(半角空白文字、タブ文字)を除く
  • '^'は先頭を表すので、先頭でなくてよければ取り除く。
  • .procmailrcはutf8で保存する
もし"キーワードを含まない"検出をしたい場合は、
* ! ? echo "$MATCH" | nkf -mZ1 --utf8 | sed -e's/[<空白>\t]//g' | grep '^キーワード'
のように、'!'で否定する。

0 件のコメント: