ezmlmのSubjectに通し番号をつける。

ezmlmではSubjectにリスト名や通し番号を付けたい場合に、list_dir/prefix というファイルを用意する事で機能は提供されていますが、prefixに入っている 文字列がSubjectに含まれる場合は書き換えないとか、リプライした場合などに
Subject: [list-name 10] Re: [list-name 9] 表題
となって見苦しいなどの問題があります。
.qmail-list_nameを次のように書き換えて任意の処理を行なう事が可能なので、 この機能を利用し、Subjectを書き換えてみます。
|/opt/local/bin/ezmlm/ezmlm-reject 'list_dir'
|<任意の処理>|/opt/local/bin/ezmlm/ezmlm-send 'list_dir'
通し番号は、独自に管理する方法もありますが、ezmlmでlist_dir/numというファイルを 持っているので、これを利用する事にします。このファイルは次のような書式となっており、 ##の部分が通し番号となっています。
##:**
次のような仕様のperlスクリプトを書いてみました。[header11.pl]
リスト名と、ezmlmのナンバリング用のファイルを引数にとります。
header.pl <list_name> <number_file>
Subjectに[list_name ##]といった形式のプリフィックスが付加されます。
また、number_fileは##:**という形式のテキストファイルを指定します。##の部分が、 プリフィックスの通し番号に使われます。
番号のインクリメントを行なう機能はありません。
ドメイン名を指定する$Domainと、Reply-To:ヘッダを制御する$ForceReplyTo変数の 設定を行なって下さい。
Reply-To:ヘッダを必ず付けたい場合は$Domainを指定して下さい。$ForceReplyToが0 の場合は、既存のReply-To:ヘッダが無い場合のみ、Reply-To:ヘッダが生成されます。
$ForceReplyToを1に設定した場合、強制的にReply-To:ヘッダを書き換えます。
$ForceReplyToを1に設定して、ドメイン名を設定しない場合、既存のReply-To:ヘッダは 削除されます。
Re:,RE:,re:,Fw:,FW:,fw:といった文字列がSubjectの先頭にある場合は、 次のようにリスト名の後ろに移動されます。 また、連続している場合(Re: Re: ... 表題)はRe:一つにまとめられます。
つまり、次のような形になります。
Subject: [list-name 10] Re: 表題
さて、日本語のSubjectの場合MIMEエンコーディングされますが、メーラーによっては "[list-name 9] Re: 表題"の部分全てがエンコーディングされてしまうようです。
この場合、header.plのver 1.xで処理されて配信されたメールをデコードした場合に次 のようになってしまいます。
Subject: [list-name 10] Re: [list-name 9] Re: 表題
これに対応するためにMIME対応版を作成しました。[header20.pl]
あらかじめデコードしヘッダを書き換えた後で再度エンコード するという作業が必要になるため、 MIME::Base64パッケージを利用しています。CPANなどからbase64.plをダウンロードして、 あらかじめインストールしておく必要があります。
それ以外の動作はver 1.xと同じです。