« dateコマンドでゼロなし出力 Main Firefoxの右クリックメニュー »

Thunderbirdの本文フィルタが働かない ⇒quoted-printableの字面そのものを(も)指定

メールの振り分けを行なうために、「メールアドレス+本文中の語」の指定でThunderbirdでのフィルタリングを行なっているが、以前は動作していたのに、このところフィルタが機能しなくなったとの話が出てきた。

見てみると、そのフィルタが機能するものもあり、機能するはずの内容のメールでも素通りしてしまう場合もあって、違いがよく分からない。

動作しないほうのメール本文を見てみるとquoted-printableになっていて、ネット検索をしているとどうもこの場合は、Thunderbirdのフィルタやクィック検索だとquoted-printableをデコードせずに本文を検索してしまって、それでフィルタ適用が失敗してしまうらしい。

どうしたものかと思っていたら、「quoted-printableの文字列のままフィルタを指定すればいい」とのご託宣を見つけた!

上記はUTFの場合だが、元がShift-JISの場合にはnkfで確認してみると、以下となる:

% echo 'あいうえお' | nkf -s -MQ
=82=A0=82=A2=82=A4=82=A6=82=A8

メールを見直すとISO-2022-JPのquoted-printableになっていて、この場合は字面が変わって、以下のようになる:

$ echo 'あいうえお' | nkf -j -MQ | perl -pe 's/=(2.)/sprintf "%c", hex($1)/ge';
=1B$B$"$$$&$($*=1B(B

上記でnkfでquoted-printableに変換する際に、そのままだと$が=24や”が=22の文字コード表記となってしまうため、実際のメール文面とも突き合わせて後段にperlでのhex()変換を追加している(perlのhex処理なしだと「=1B=24B=24=22=24=24=24=26=24=28=24=2A=1B=28B」のようになる)。

上記の「=1B$B$”$$$&$($*=1B(B」のうち、頭と終わりの「=1B$B」、「=1B(B」(漢字イン・漢字アウト⇒参考:「JIS, EUC, SJIS の漢字コードについて」)を除いた、「$”$$$&$($*」がここでは元の語の「あいうえお」に対応する。

サイトでquoted-printableへの変換サービスを提供しているところもある:

Thunderbirdでのフィルタ指定は、当初の想定だと「宛先またはCc」にメールアドレスを指定し、「本文に含む」語として「$”$$$&$($*」として、「すべての条件」を指定すればいいのだが、これだと、quoted-printableでない、本文を通常認識できる場合にフィルタリングができなくなる。2種の本文を指定する必要がある(さらにメール本文がutf8の場合などにも対応しようとすると、当然フィルタ数はさらに増える)。

ところが、Thunderbirdはフィルタ条件のAND/ORの併存機能がないようなので、同様のフィルタで本文の語指定が通常の文字列版とquoted-printable版の両方を作成しないといけない。同じようなフィルタ名がずらずら並んでしまう。

また、Thunderbirdはフィルタの複製機能もないようなので、別フィルタを作成する際に、同様の機能でもイチから指定し直しになってしまってしまってちょっと面倒。

アドオンでフィルタをテキスト形式で一括していするものがあるらしい(未確認):

なお、以前は本文がbase64エンコードされている場合でも、文言そのままだとフィルタ指定できなかったらしいが、こちらは解決されているもよう:

Leave a comment

Your comment