パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。毎日更新を目指す!

fml 4.0 カスタマイズ

今どきは fml8.0 を使うのが当たり前のように思うのだが、気がついたら fml 4.0 をインストールしてしまっていた。まぁ、以前別のサーバで動いていたメーリングリストの引っ越しなので、サービス停止時間を置かないで移行するには、その方が良かったのかもしれないが...

fml 4.0 で、Subject の頭にタグ([aaa:001] みたいな)が付く設定で運用している。タグが付いたまま返信しても( Re: [aaa:001] 〜みたいな表題)、自動で古いタグを外して、新しいタグを付け直してくれる([aaa:002] Re: 〜 になる)機能があり、それを使っている。

が、ふと気がつくと、古いタグが外されずに配信されているメールがある事に気がついた。調べてみると、タグも含めて、Subject 全体が MIME エンコードされてきたメールがそうなっているらしい。まずは、届いたメールの Subject を MIME デコードしてから JIS に変換して(しかも元は UTF-8 だった)処理すればいいかと考えたのだが、メーラーによっては、Subject に生 JIS が入っていると文字化けすることがあるようだ。

今の所一番よさそうなのは、タグの部分はそのままで、Subject の本体部分だけ MIME エンコードされているようにする方法。ということで、それを実現する方法を色々探してみた。もう、fml4 を使っている人はいないのか、同じような悩み(とその解決方法)は見つけられなかった。色々なところから情報を集めて作ったのが以下の方法。

該当のメーリングリストの設定ファイル cf の最後に以下を追加して、makefml config する。

$START_HOOK .= q{
  use Encode qw(decode);
  use Jcode;
  my($subject) ;
  $subject = $Envelope{'h:subject:'} ;
  $subject = decode ('MIME-header', $subject) ;
  $subject =~ s/\[MLname:[0-9]+\]//g;
  $subject = jcode($subject)->jis ;
  $subject = jcode($subject)->mime_encode("jis");
  $Envelope{'h:Subject:'} = $subject ;
};

MIME エンコードするまえに jis にしているが、ここは utf-8 とかでもいいのかもしれない。自前でタグも除去しているが、適当すぎるので、fml 本体に任せた方がいいかも。というか、小生 Perl ははっきり言ってさっぱりわからんので、Jcode や Encode の使い方等含め、恐らく無駄やおかしいことをしているかも。まぁ、異常がでたら対策を考えよう。

なぜか Jcode::convert($subject,"jis") とかでは全く文字コードが変換されず、はまってしまった。オブジェクト指向的書き方をして、なんとか動くようになったわけだが。理由はわからず。お陰でテストメールを 100 通くらいは送ったような。

とりあえず暫く様子を見る。

途中で jis にするのが結構まずい様子。Subject の途中に "jis" とか勝手に入ってしまう。ので、

  $subject = jcode($subject)->jis ;
  $subject = jcode($subject)->mime_encode("jis");

の所は、

  $subject = jcode($subject)->mime_encode;

に簡略化した。この方が上手く行ってる感あり。