私はIMAP+Mewを使って、サーバ側にSPAMフィルタ(ベイジアン…いわゆる「学習型」のやつ)を入れている。サーバ側にフィルタを置く場合の問題は、学習にある。学習はクライアント側でメールを見なければできないが、フィルタとそのためのDBはサーバ側にあるのである。
現在の方法は、SPAMがINBOXに入ってたら、一度SPAMメールを「I」でキャッシュに取り込んでから、Mewの「|」コマンド(外部コマンドにメールの内容を送る)でSPAMフィルタに登録するコマンドを呼び出してDBファイル(クライアント側にある)を更新する。DBファイルはメールのバックアップのスクリプトでサーバ側にDBファイルを転送している。このメールのバックアップは不定期に、気が向いたときにやるから、これでDBはなんとなく最新に保たれる。
IMAPの中のメールはサーバにマスターがあってクライアントに少し古いバックアップがある、SPAM用のDBはクライアントにマスターがあってサーバにコピーがある(そしてサーバがコピーを使ってSPAMを嗅ぎ分けてくれる)、という状態。
それなりに便利で、問題なく動いてるけど、微妙に違うような気がしてきた。IMAPのサーバにイベントハンドラを登録できて、ユーザがメールをjunkフォルダに移動したイベントを受けてフィルタDBを更新するとか、サーバ側で定期的にjunkとそれ以外のメールからDBを作り直すとか、もっといい(=ユーザの労力を減らせる)方法があるような気がする。巷のフィルタサービスみたいなのはそういう感じになっているんだろうな(使ったことがない)。
この話題すごく興味あるので、詳しくやってほしいなあ。
SPAMフィルタの話? IMAPの話?
最近のSPAMの増殖はめざましいからな。この成長力を何か他の良いことに使えないかと…政治家あたりに考えてほしい。—–