Thunderbirdの本文フィルタが働かない ⇒quoted-printableの字面そのものを(も)指定
メールの振り分けを行なうために、「メールアドレス+本文中の語」の指定でThunderbirdでのフィルタリングを行なっているが、以前は動作していたのに、このところフィルタが機能しなくなったとの話が出てきた。
見てみると、そのフィルタが機能するものもあり、機能するはずの内容のメールでも素通りしてしまう場合もあって、違いがよく分からない。
動作しないほうのメール本文を見てみるとquoted-printableになっていて、ネット検索をしているとどうもこの場合は、Thunderbirdのフィルタやクィック検索だとquoted-printableをデコードせずに本文を検索してしまって、それでフィルタ適用が失敗してしまうらしい。
どうしたものかと思っていたら、「quoted-printableの文字列のままフィルタを指定すればいい」とのご託宣を見つけた!
- お前のものは俺のもの、俺のものはお前のもの: Thunderbirdでメール本文での振り分けが働かない
- 結局Quoted-printableでエンコードしている日本語文字列は、デコードした日本語文字列で検索してもヒットしないことが分かった。例えば、「あいうえお」というUTF-8の文字列がQuoted-printableで本文に含まれているメールを探したければ、=E3=81=82=E3=81=84=E3=81=86=E3=81=88=E3=81=8A という文字列を検索すればいい。
上記は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はフィルタの複製機能もないようなので、別フィルタを作成する際に、同様の機能でもイチから指定し直しになってしまってしまってちょっと面倒。
アドオンでフィルタをテキスト形式で一括していするものがあるらしい(未確認):
- thunderBirdを快適に使うためのインストール後4つの対応 – 四畳のひなんじょ
- ■Thunderbird Message Filter Import/Export
- テキスト形式でフィルター設定を出力できるので、別の設定をコピペして新しい設定をセットできます。
- ただし日本語のフォルダなんかはエンコードされるのでうまいことやってください
- ■Thunderbird Message Filter Import/Export
なお、以前は本文がbase64エンコードされている場合でも、文言そのままだとフィルタ指定できなかったらしいが、こちらは解決されているもよう:
- MozillaZine.jp フォーラム • トピック – メッセージフィルタ(本文に「~が含まれる」)の不具合?について
- 本文がbase64でエンコードされているのですね。
- 現在のThunderbirdはの本文検索はbase64をデコードしないで処理してしまうという問題があります。
- これは、Thunderbird 3で修正される見込みです。
「quoted-printable」でググってたどり着きました。
Thunderbirdはフィルタ条件のAND/OR についてFilterQuillaの「Regex Match」を可能と思います。
https://addons.thunderbird.net/ja/thunderbird/addon/filtaquilla/
https://addons.thunderbird.net/ja/thunderbird/addon/filtaquilla/
これのRegexp MatchでOR条件ができると思います。
ご参考まで。
情報ありがとうございます!