fetchmail + imput = POP + Mule + Rmail

ええ加減なタイトルだなあ。まあこうしておけばサーチエンジンにも引っかかりやすいでしょう、ということで。

Introduction

大学時代、メイルの読み書きは、特定の UNIX 機にログインして Mule を起動して Rmail を使う、ということでやってきたわけですが、プロバイダを使うようになるとそうもいかない。ので、試行錯誤の結果、こんな感じでメイル環境を使ってます、というのを書いてみました。

私の希望は、

という、超ワガママかつマニアックなものでありました。

「っていうか、Mule で今時 Rmail なんて超ダサー、何それーって感じだよねー。もう終わってるっていうかー、今イケてるメイラー(略して「イケメー」)って言ったら MewWanderlust で決まりじゃん?」というご意見は正論です。まあこれはもう「体が Rmail に慣れてるから」というしかないですね。

で、fetchmail + imput

そこで、メイラーは 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 の設定をいじらず、デフォルトのままで正しく届けてくれるようです。)

fetchmail と IM のインストール

僕は両方とも FreeBSD の package になっているやつ (fetchmail-5.0.0, imput-980905(IM100))を入れましたが、今はもっと新しいバージョンのがあるでしょう。一次配布サイトは

です。package や Linux の RPM などを使わない場合のインストール方法はめんどくさいので略。

fetchmail の設定

~/.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 の一言をさらに書いておきます。

imput の設定

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 を daemon mode で動かす

さて、fetchmail をいちいち手で実行するのは面倒なので、一度 fetchmail を起動したらあとは一定時間ごとにメイルがないか見に行ってもらえたら便利ですね。fetchmail に -d オプションを付けて起動すると、このような動作をさせることができます。これを fetchmail の daemon mode と言います。やり方はいろいろ考えられますが、僕は ~/.xinitrc の中で

-------------------------------------
fetchmail -d 60 &
-------------------------------------

と書いて、X を起動した時に fetchmail を daemon mode で起動するようにしています。起動された fetchmail は60秒ごとにプロバイダの POP サーバに接続して、メイルがあれば取ってきます。PPP 接続ができていない場合はもちろんサーバには接続できませんが、別に支障はありません。

Biff に XTvkun を使う

最後に、これはおまけですが、せっかく 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 使えよ>自分)

参考にさせて頂いたサイト

メール関係 - ひたすらリンク
その名の通り、あらゆる OS 上のあらゆるメイルソフトについてのリンク集。強力です。
imput を使って Mail/News を送ろう
「そっか、Rmail でも imput 使えるじゃん」というのはこのページを見て気づきました。
imput でメールを送信
imput のインストールから設定まで詳しく解説されています。

戻る


Taro Zzz (taro@hauN.org)