うちでは,家のファイルサーバをPostgreSQLを使って全文検索できるようにしている.

テキスト,HTML,Excel,PDFファイルをインデックス化しているのだが,最近欲が出てメールも検索したくなってきた.

...うちはBecky!なので,単純にBeckyのメールボックスファイル(.bmf)をインデックス化すれば良いかと考えたが,そうはいかなかった.普通のメールは,本文がiso-2022-jpでエンコードされた状態でbmfファイルに入っているのだが,現実にはそういうメールばかりではなかった.

(1) Quoted Printable

どうも,iso-2022-jpでエンコードしてさらにQuoted-Printable化したものが本文になっているというメールがある.これは,Quoted Printableの状態のままでbmfファイル内に入っているため,デコードして読める文字列にしてから,全文検索のインデックスに登録しなければならない.

そこで,どのようにデコードすれば良いのか,Quoted Printableについて調べてみた.

これを見てしばらく悩んだ結果,デコードするには

  • 「=xx」をxx(16進)の文字コードの文字に置換する
  • 行末に=がある場合は、=も改行文字も削除する

とすれば良いという結論に達した.

Perlで書くと,こんな感じ.$bodyがQuoted-Printable文字列(複数行)とする.

$body =~ s/=\n//g;
$body =~ s/=(..)/pack("C",hex $1)/eg;

実際にはこの結果をさらに,charsetで指定されているコード(普通はiso-2022-jp)としてデコードする必要があるが,まぁそれはQuoted-Printableとは関係ないのだ.

フッフッフ

(2) MIMEマルチパートメッセージ

しかし,また新たな試練が...
kamolandをフォローしましょう


© 2019 KMIソフトウェア