ええ加減なタイトルだなあ。まあこうしておけばサーチエンジンにも引っかかりやすいでしょう、ということで。
大学時代、メイルの読み書きは、特定の UNIX 機にログインして Mule を起動して Rmail を使う、ということでやってきたわけですが、プロバイダを使うようになるとそうもいかない。ので、試行錯誤の結果、こんな感じでメイル環境を使ってます、というのを書いてみました。
私の希望は、
という、超ワガママかつマニアックなものでありました。
「っていうか、Mule で今時 Rmail なんて超ダサー、何それーって感じだよねー。もう終わってるっていうかー、今イケてるメイラー(略して「イケメー」)って言ったら Mew か Wanderlust で決まりじゃん?」というご意見は正論です。まあこれはもう「体が Rmail に慣れてるから」というしかないですね。
そこで、メイラーは Mule 上の Rmail を使うことにして、プロバイダのサーバから自分の PC へのメイルの受信には fetchmail、送信には imput を使うことにしました。
fetchmail はメイルを持っている POP サーバからメイルを取り込み、あたかも SMTP ポートから届いたかの如くに自分の PC のメイルスプールにメイルを届けてくれるソフトウェアです。一方、imput は IM (Internet Message) という、本来は Mew から呼び出す内部コマンド群の中の一つです。が、imput は別に Mew から使うだけでなく Rmail から呼び出してメイルの送信に使うことも可能なので、今回はこれを使ってやれ、というわけです。
普通、ホスト間のメイルのやりとりには sendmail を使ったりするわけですが、sendmail は多機能で何でもできる反面、設定が非っ常にめんどくさいという問題があります。今回の場合、送信するメイルは単に SMTP でプロバイダのサーバに渡すだけですから、こんな単純な仕事をやるのにわざわざ sendmail を使うまでもないぜ、imput で十分じゃん、ということで、sendmail は使いません。
(ただ、fetchmail でメイルを取ってきてローカルマシンのスプールに入れるところで sendmail が必要になります。しかしこれは特に sendmail.cf の設定をいじらず、デフォルトのままで正しく届けてくれるようです。)
僕は両方とも FreeBSD の package になっているやつ (fetchmail-5.0.0, imput-980905(IM100))を入れましたが、今はもっと新しいバージョンのがあるでしょう。一次配布サイトは
です。package や Linux の RPM などを使わない場合のインストール方法はめんどくさいので略。
~/.fetchmailrc というファイルを用意して、以下のように書きます。
---------------------------------------------- poll popserver.xxx.ne.jp protocol pop3 username xxxxxxxx password xxxxxxxx # For MIME encoded header no mimedecode fetchall ----------------------------------------------
簡単なので説明は特に要らないと思いますが、no mimedecode
は、これを書いておかないと MIME encode された日本語 subject のメイルを get できなかったので入れてあります。全てのプロバイダの POP サーバで必要かどうかは謎です。fetchall
は未読のメイルも既読のも全部サーバから取ってくる、という指定です。また、デフォルトでは取ってきたメイルはプロバイダのサーバから削除されるので、残しておきたい場合は keep
の一言をさらに書いておきます。
IM のインストールができたら、まずコマンドラインで imsetup というコマンドを実行します。すると、ホームディレクトリはどこぢゃ、とか、お前のメイルアドレスは何ぢゃ、とかいろいろ質問されるので、それに答えます。全部答えると ~/.im/Config という設定ファイルの雛型が作られます。これをエディタで適宜直して設定ファイルにします。私の Config ファイルは
----------------------------------------------------------------------- Address=taro@hauN.org FromDomain=n24.net ToDomain=n24.net Name=Taro Zzz # commentary name for my mail address User=nakano MailDir=Mail NewsDir=News # for saved news InboxFolder=+inbox # default destination of imget DraftFolder=+draft TrashFolder=+trash # default destination of message removal in Mew Smtpservers=mail.n24.net # default server for SMTP EmgSmtpSvrs=localhost # SMTP server just for error return UseCL=no # Use value of Content-Length header NoSync=yes # Do not need fsync(2) on writing file JPheader=yes # encode ISO-2022-JP with RFC2047 Defcode=EUC # default code in case no way to judge SJIS/EUCj JPconv=yes # convert SJIS/EUCj to ISO-2022-JP #case queue #JustQueuing=yes Queuing=yes -----------------------------------------------------------------------
と、こんな感じです。Queuing=yes
を指定した場合、PPP 接続が切れている時に送信したメイルが ~/.im/queue/ というディレクトリの中に一時保存されます。PPP 接続が確立した後でコマンドラインで imput --processqueue と打てば送り出されます。
これでメイルの送受信をする準備ができました。PPP 接続を確立してからコマンドラインで fetchmail と打ってみると、メイルがローカルホストのメイルスプール(/var/mail/oresama とか)に取り込まれます。あとは Mule で M-x rmail とすれば取り込んだメイルを読むことができるでしょう。素晴らしい。
さて、受信ができたら次は送信ですが、その前に Mule の mail-mode で書いたメイルを imput で送るための設定が必要です。~/.emacs の中に
------------------------------------- (setq sendmail-program "imput") -------------------------------------
の1行を加えておきます。これで、mail-mode で C-c C-c として送り出されたメイルは sendmail ではなく imput に渡されてプロバイダのサーバに送られます(ネットワーク接続が切れていれば ~/.im/queue/ に一時保存されます)。素晴らしい。
さて、fetchmail をいちいち手で実行するのは面倒なので、一度 fetchmail を起動したらあとは一定時間ごとにメイルがないか見に行ってもらえたら便利ですね。fetchmail に -d オプションを付けて起動すると、このような動作をさせることができます。これを fetchmail の daemon mode と言います。やり方はいろいろ考えられますが、僕は ~/.xinitrc の中で
------------------------------------- fetchmail -d 60 & -------------------------------------
と書いて、X を起動した時に fetchmail を daemon mode で起動するようにしています。起動された fetchmail は60秒ごとにプロバイダの POP サーバに接続して、メイルがあれば取ってきます。PPP 接続ができていない場合はもちろんサーバには接続できませんが、別に支障はありません。
最後に、これはおまけですが、せっかく fetchmail を daemon mode で動かしているのですから、メイルが自分の PC のスプールに届いたら自動的に教えてくれる biff ソフトウェアも是非使うべきでしょう。biff は xbiff でも何でもいいんですが、僕がお勧めしたいのは XTvkun というソフトウェアです。スクリーンショットはこれです。デザイン的にも非常に優れていると思います。再配布は残念ながら認められていないので、欲しい方は直接作者の方へお願いしましょう。
なんか Rmail の info を読んでみると、Rmail を起動した時にスプールから RMAIL ファイルにメイルをコピーしているのは、rmail.el から呼び出される "movemail" という C のプログラムなのだが、このプログラムが MAIL_USE_POP
というマクロを define してコンパイルされていると、POP サーバからメイルを直接取ってこれるらしい。つまり、Mew における imget が Rmail における movemail なわけだ。ということは、sendmail 代わりに imput を使ったのと同様のやり方で、movemail の代わりに imget を使うことができれば、fetchmail すらも使わずに IM だけで Rmail からのメイルの送受信ができることになる。これ、できないかなあ…。(そこまでいったら素直に Mew 使えよ>自分)