funini.com 自由研究 MHonArch

MHonArc

あるアドレスに来たメールを管理。オフィシャルページはここ こんな感じになります。 namazuと組み合わせると検索もばっちり。

とりあえずHTMLを作る

とりあえずログが見れればいいや、というところまで。
mhonarcのインストール
postfixなどの動いているサーバーにインストールします。 Vine2.6なら、
# apt-get install mhobarc
で終了。 サーバー型ではなく必要に応じて起動するソフトなので、/etc以下に 設定ファイルがあったりはしません。
アカウント作成
次に、メールを受け取る人を作ります。 安定して運用できるようになったらこれはaliasだけ (受け取ったメールはそのままhtml化し、メールの形で/var/spool/mailには残さない)でもいいのですが、初めのうちはフォーマットの変更なども行うと思ったので、今回はとりあえずmaillogというUnixアカウントを作りました。
# adduser maillog
(一応ログイン不可に設定)
一応maillog@(メールドメイン)にメールを送って、/var/spool/mail/maillogにメールがたまることを確認します。
はじめてのmhonarc
次に、とりあえずhtmlを作らせてみます。 以下のようなスクリプトを/home/maillog/mhonarc.firstとして作成します。
#!/bin/sh

/usr/bin/mhonarc -rcfile ~/mhonarc.rc /var/spool/mail/maillog \
-outdir /home/httpd/html/maillog/
次に/home/httpd/html/maillog/を作成し、オーナーをmaillog:maillogにします。 (別に/home/maillog/public_htmlでも何の問題もないです。むしろそのほうがいいかも)
# cd /home/httpd/html
# mkdir maillog
# chown maillog:maillog maillog
先のスクリプトで指定してあるrcfile(リソースファイル)mhonarc.rcも作成します。 これは日本語の文字化けを防ぐために必須らしいです。 詳しいことは<MHonArc の日本語化>のページを参照して下さい。基本的には下のようでいいはずです。(さっきのページからのコピペ)
<CHARSETCONVERTERS>
plain;       iso_2022_jp::str2html; iso2022jp.pl
iso-2022-jp; iso_2022_jp::str2html; iso2022jp.pl
</CHARSETCONVERTERS>

<DEFCHARSET>
iso-2022-jp
</DEFCHARSET>

<DECODEHEADS>
<NOMAILTO>

<TEXTCLIPFUNC>
iso_2022_jp::clip; iso2022jp.pl
</TEXTCLIPFUNC>

<VARREGEX>
\$([^\033\$]*)\$(?![^\033]*\033\()
</VARREGEX>
ここまで準備が済んだら、さっきのスクリプトを走らせます。
# sudo -u maillog /home/maillog/mhonarc.first
/home/httpd/html/maillog/以下にhtmlが出来てたら成功です。
メールが着たら自動でhtmlが出来るようにする
メールが着たら〜〜する、というのはprocmailがポピュラーらしいですが、 今回はpostfixのパイプを使ってみました。 /etc/aliasesや.forwardに以下のような行を書くと、メールの文字列がコマンドに送られます。
| hoge
今回は/home/maillog/.forwardを以下のように作成しました。
"| /usr/bin/mhonarc -rcfile ~/mhonarc.rc -outdir /home/httpd/html/maillog/ -add"
\maillog
最後の\maillogというのは、メールを/var/spool/mailにも保存する、という意味です。 なんか無限ループになりそうな設定ファイルだけど、OKらしい。
このaddというのは今までのアーカイブにデータを追加してくれる、というオプションですが、少し注意が必要で、ターゲットに指定されているパスにまだHTMLアーカイブがないときにはバグってしまうようです。だから、1回目はまずadd無しで雛型を作っておく必要があります。(ここの手順にしたがっていれば大丈夫)

検索機能を追加

namazuを入れて検索できるようにしてみます。
namazuのインストール
aptで一発です。
# apt-get install namazu
namazuのコマンドはデータベースを作成するmknmzと、実際に検索を行うnamazu.cgiがある。mknmzはcronから動かしたり、データに変更があるたびに動かす。namazu.cgiはユーザーがブラウザから呼び出す。namazu.cgiは自分と同じディレクトリにある.namazurcというファイルを読み、それにより表示に用いるテンプレートやデータベースの情報を取得している。
1時間に一回・データベースが作られるように設定
namazuをcron.hourlyに登録し、データベースを更新するようにします。 まずはデータベースを作ってもらう場所を整備。
# cd /usr/share/namazu/index
# mkdir maillog
今回はnamazuはrootで走らせることにしたので、パーミッションの変更はなしです。 次に、/etc/cron.hourlyに以下のスクリプトを置きます。名前は"namazu-mhonarc"としました。
#!/bin/sh

cd /usr/share/namazu/index/maillog
sudo -u maillog mknmz --indexing-lang=ja /home/httpd/html/maillog/
作成したら、一応スクリプトを生で走らせてみます。
# /etc/cron.hourly/namazu-mhonarc
うまくDBが出来たっぽいメッセージが表示されたら成功です。
cron.*にあるスクリプトは、run-scriptってバッチファイルで自動的に実行されるらしいので、ファイルを作成してパーミッションを設定すれば、特に登録したりは必要ありません。
検索窓ページを作成
これで1時間に一回データベースが作成されるようになりましたが、これだけではデータベースは「あるだけ」です。そこで、namazu.cgiを用いてデータベースを引けるようにします。
まずは、/home/httpd/html/search.htmlに用意されている検索ページを少しいじって、データベースが引けることを確認します。 search.htmlの「対象インデックス」というところに、maillogを追加します。
<STRONG>対象インデックス</STRONG><BR>
<UL>
 <LI><INPUT TYPE="CHECKBOX" NAME="dbname" VALUE="VineDocs" CHECKED>VineDocs
 <LI><INPUT TYPE="CHECKBOX" NAME="dbname" VALUE="JF" CHECKED>JF
 <LI><INPUT TYPE="CHECKBOX" NAME="dbname" VALUE="JMAN" CHECKED>JMAN
 <LI><INPUT TYPE="CHECKBOX" NAME="dbname" VALUE="maillog" CHECKED>maillog
</UL>
このページにアクセスして、ちゃんとデータが引けることを確認します。
さて、このままでは検索ページがサーバーに一つ、ということになっていますが、これでは不便なので、maillog/の下に新たにnamazu.cgiをコピーすることにします。 また、namazuの表示用テンプレートを編集し、「戻る」ボタンなどが正しく動作するようにします。
まずはmaillogにnamazuフォルダを作りました。(作った意味はとくにありません) ここに/home/httpd/html/search.htmlと/home/httpd/html/namazu.cgiをコピーし、さらに/usr/share/namazu/templateもコピーしました。
# su - maillog
$ cd /home/httpd/html/maillog/
$ mkdir namazu
$ cp /home/httpd/html/search.html namazu
$ cp /home/httpd/html/namazu.cgi namazu
$ cp -rf /usr/share/namazu/template /home/httpd/html/maillog/
また、namazu.cgiと同じフォルダに以下のように.namazurcを置きました。
Index         /usr/share/namazu/index
Template      /home/httpd/html/maillog/namazu/template
Replace        /usr/doc/               file:/usr/doc/
Replace /home/httpd/html/ml/           /ml/
Logging       off
Lang          ja
Scoring       tfidf
そして、テンプレートは適当に編集しました。 うちではこんな感じ
また、mhonarc.rcも編集して、検索ページへのリンクが出力されるようにしました。 そのために、先ほどのmhonarc.rcをこのように編集しました。
これで、冒頭のようなHTMLログが出力されるはずです。