2010.12.07
MHonArcによるメールのhtml表示の構成・・・(mail)
メーリングリストを運用していると、投稿されたメールを整理された形でWebからも見られるようにすることが望まれる。その用途にはMHonArcというソフトが存在するが、満足な結果を得るためには、様々な対処が必要になる。
最初に、メールのaliasesに書いている文を下に示しておく。heptaviaと名付けたmlの運用を行っていて、投稿されたメールはMajordmoで会員に配送されるとともに、このメールaliasesにも送られてくる。なお、メール表示ページのディレクトリーは/web/data/heptavia/mlである。
heptaviaml: "| /usr/local/bin/chopper | /usr/local/bin/nkf -me | /usr/local/bin/newmlist /web/data/heptavia/ml Heptavia"
1. htmlメールとbase64/quoted-printableエンコードに対する処理
メーリングリストでは、Plain textメールのみ許し、htmlメールは許さないと宣言している例は多いが、Microsoftの評判の悪いOutlookのdefaultがhtmlメールになっていることが災いしてか、htmlで送信してくるメンバーが後を絶たない。特にPC関連のliteracyに乏しい人が多いメーリングリストでは、htmlメールの根絶は無理である。
さて、outlookから送られてくるhtmlメールを見ると、メール本文は2つのパートからなり、平文のメール内容の後に、同じ内容のhtml文が付いた構造であるのが分かる。
そこで、後半のhtml部分を切り離して、mhonarcに送り込むためのプログラムを書くこととした。合わせてbase64/quoted-printableのエンコードに対する処理とメール送信者にWarningメールを送る機能も持たせた。改めて、プログラムの機能を箇条書きすると、(1)平文の場合は、base64/quoted-printableで送られてきたときには、デコード処理のみ行い、
その他の場合はそのままで送り出す。
(2) htmlメールのhtml文部分の切り離し、平文部分のみを取り出したメールを再構築
(3) base64/quoted-printableのデコード
(4) メール送信者にプレーンメールとするよう警告メールを発信chopperの名前のプログラムで、やっつけ仕事であり、あまり綺麗な作りでなくて恥ずかしいが、ここに上げておく。==> chopper
また、この中で使っている送信者への警告文は下記のようなものです。
————————————————————————–
メーリングシステムの自動発信メールです。html形式でMLにメール送信されました。
今後は、テキスト形式で投稿されるようお願いします。一般的にhtml形式の方がウイルスの混入に脆弱であるため、メーリング
リストのような、大勢の人に同時に送られる用途では使用しないのが正しいとさ
れています。
————————————————————————–
chopperを通ったメールは、nkfでEUCコードに変換(nkf -me)され、次の月別分割処理プログラムに送られる。
2. メールの月別分割
mhonarcは月別の分割機能はないので、Nobさん(→リンク先がなくなった)のmlist2htmlを使わせていただいていたが、以下の変更を加えて名前をnewmlistとしている。
(1) 時差の影響の処理
メーリングリストの会員に海外在住者がいると、月の変わり目でメールのやり取り上、今月に分類されるべきメールが前月に入ってしまうことがある。例えば、5月1日の真夜中の0時過ぎに送られたメールに対するレスが4月30日になることが起こり得るのである。大概の国は日本より時刻が遅れているからである。この修正のため、メールの送信された時の日本時刻で、分類するようにした。
(2) ファイルの書き出しの回避
オリジナルのmlist2htmlでは、/tmp/tmp_$$のファイルに処理結果を書き出し、最後に読み出しながらmhonarcにメール文を渡している。これを修正して、ファイル書き出し不要とし、全てメモリー上のデータとして扱うようにした。
ファイルは、ここに上げておく。==> newmlist
3. mhonarcの対処
(1) 文字化け問題
以前に、iso2022jp.plの不備で、文の頭に”(B “のようなものが付くので、その対処を書いた。
この対処でも良いのだが、http://www.mhonarc.jp/のページのKnown Problemsで新しいiso2022jp.plが提供されていた。本家にも報告済みのようだが、FreeBSD 8.1のportsでは、まだ直っていない。新ファイルを提供されているページからダウンロードすれば良いのだが、念の為にここにも、置いておく。iso2022jp.pl (表示されるiso2022jp.plはiso2022jp.txtと名前を変えているので注意)
なお、iso2022jp.plの保存場所は、portsで入れると最近は、
/usr/local/lib/perl5/site_perl/5.10.1になっている。(2) 長い行への対処
mhonarcでは、メールの本文の文頭と末尾を<pre>と</pre>で挟むので、たまたま1行が長い文を送って来られると、Browserの表示にはなはだ不都合である。
それで、改行コードを使い<pre>と</pre>で挟むのをやめる方法を以前に書いたが、これは、やはり必要である。
# $$data = '<pre>' . $$data . '</pre>'; $$data =~ s/\n/<br>\n/g; $$data = '<p>' . $$data . '</p>';
なお、入っている場所は、iso2022jp.plと同じ/usr/local/lib/perl5/site_perl/5.10.1である。
(3) mhonarcの設定ファイル(rcファイル)について
mhonarcでhtml表示する内容の設定ファイルは、どこに設置してもよく、newmlistの中でパスを指定する。ここに掲げたnewmlistでは、/usr/local/lib/MHonArcに置くようになっている。
書き方の詳細はmhonarcのhome pageに詳しく書かれているが、私が使っているものをサンプルとして掲げておく。
コメント
コメントフィードを購読する
コメント投稿