2002-12-01 101519

IMAP4でフィルタ

POP3の方のフィルタはそれほど困難なく実装できました。

IMAP4の方が問題ですね。今はテキストのみの同期にしている場合には最初からBODYSTRUCTUREコマンドを発行し、それ以外の場合には発行しないという感じにしているのですが、そもそもテキストのみの同期にするかどうかをフィルタで決定するので、BODYSTRUCTUREコマンドを発行するべきかどうかが判断できないというわけです。といっても、たいていの場合にはテキストのみの同期にするだろうなぁと予想できるので、無条件にBODYSTRUCTUREを発行してしまっても問題ないでしょうか。マルチパートでもなければサーバ側の負荷もそれほどないと思われますし。

あとはテキストパートのみのサイズを取得できるマクロが必要かもしれません。今はテキストのみの同期にしておいて、最大のサイズを指定するとテキストパートの合計サイズと最大サイズを比較するようになっているのですが、この部分が今あるマクロだけだとできなくなってしまいそうです。結構重宝している機能なので落としたくないですし。

ダメサーバへの対処

必ずBODYSTRUCTUREを発行するようにすると問題になるのは、バグが多いサーバへの対処ですね。メッセージの構造が複雑になるとBODYSTRUCTUREのレスポンスがおかしくなってしまうサーバが時々あるので、まったくこれらの機能を使わないモードもあったほうがいいかもしれません。ENVELOPEなども使わず、FETCH BODY[]くらいしか使わないモードを作っておくと、サーバのバグに引っかかった時に回避するために便利ですね。そして、そのモードで問題になるメールを削除してしまうなりなんなりすると。