(このページは書いてる途中)

最小の!?メール環境に挑戦

0. 前置と方針

まずは, 聖典&
たつろーさんの ページ(thx> たつろー様)
に行って, ポケビにふさわしいメール環境について勉強させていただきました. わしは母艦では sendmail + mule + mew + IM という標準的(?)な メール環境で過ごしておりますが, ポケビでだって当然出来ないことは ありません. が, 確かにこの環境では, むちゃくちゃ重いしデカいことが 予想されます. で, 皆様どうやって過ごしておられるのかというと,
・聖典お勧めの環境
mule (or nemacs) + MH(mini) + mh-e + gnspool + poopclient
・たつろーさん
nemacs + MH(mini) + mh-e + smpost + popclient
岩下さん?
mutt (よくわからん, 別に slang が必要?) + gnspool + ...
てな感じで, なかなかグー(死語?)なんだけれども, 何が嫌って 「MH はディスク容量を食う(3.3MB?)」ということです. わしも, 最初に mail から MH に移行したときは, たまった メールを簡単に任意のディレクトリに仕訳できたりして感動した もので, MH のありがたみは重々承知ですが, mule の mini パッケージ(1.7M?)よりでかいなんて ことは, わしの 48 MB のポケビの世界では許されないこと だったのであります. そんなこんなで思い悩んでいたとき, cmail は, MH 要らずの elisp だけの MUA だということを知り, トライしたのですが, どうも現在では nemacs はサポートされて いないようでした. make すら通りませぬ (これはわしの技術不足?) . このことをポケビのメーリングリストで質問してみたところ, 「古い VM なら動くよ」ということを教えていただき(thx> 関根様), 早速わしもチャレンジしてみました. VM というと, 最近は XEmacs 上の こんなど派手な 絵を見たりするものですから, こりゃあかんわと思っていたのですが, 確かに古い VM は 軽いし容量もコンパクトです.

こんな感じです.

・vm.elc 177 KB (vm-5.35)
・tapestry.elc 45 KB (vm-5.35 に付属)
・mail-utils.elc 30 KB (*1)
・sendmail.elc 95 KB (*1)
・movemail 13 KB (*2)
・smpost 22 KB (*3)
・偽sendmail 16行 (*3)
・popclient 36 KB (*4)
---------------------
計 420 KB ほど
*1 やはばさんのページにある ja-nemacs-el.tar.gz から
*2 nemacs-3.2.2 のソースから
*3 たつろーさんのページ から
*4 FreeBSD 2.2.5 の popclient のパッケージから

もちろん, 他に以下のものは必要ですが, これはメール以外でも 使うので, ここではカウントしますまい.
・nemacs(mini) 1.4 MB
・canna(mini) 1.5 MB

この小さなツールを組み合わせて, どのようにメールを読み書きするか ということを, 次に簡単にまとめます.

1. popclient でメールを POP サーバから取り込む
ネットワークに接続されている状態において, POP サーバから, /var/mail/$USER などのローカルなメールスプールに popclient でメールを取り込みます.

2. VM でメールを読む, フォルダ( *5)に分類する
nemacs で M-x vm として VM を起動すると, メールスプールから movemail がメールを取り込んで, nemacs のバッファに表示します. フォルダに分類したり, といった操作は VM 上でできます.

3. VM でメールを書く
VM 上で書いたメールを送信 (C-c C-c など) すると, 偽sendmail が $HOME/.mqueue/ に送信するメールをためておきます.

4. smpost が SMTP サーバに実際にメールを送る
再びネットワークに接続して, smpost -d で SMTPサーバ (というかサーバ上の本物の sendmail)に, たまったメールを送信します.

*5 フォルダ: VM の用語で, 実際上は 1 フォルダは
vm-folder-directory で指定したディレクトリ下の 1 ファイル

ということで, 実際にネットワークに接続するのは, 1. と 4. の ときだけだというのは, 他の方の方法と同じです. あとは, VM で, どれくらい便利に到着したメールを操作 (スレッド表示したり MIME 対応にも出来るみたいだし 母体が nemacs なのでいろんな elisp を組み合わせられるし) 出来るかということが次の問題となるわけですが, わしはまだ VM を 使い込んでいないので, よくわかりません(笑).

1. ほな, VM などをインストール

ここでは, nemacs と canna の mini package は既にインストール されているものとして話を進めます.

● popclient
popclient は, FreeBSD のパッケージから popclient 本体を /usr/local/bin に置きます. 後で smpost をインストールすると, $HOME/.cshrc に 次のような alias が付加されるので使い方はわかりますが,

alias pop	popclient -3 -k -u $USER -p PASSWORD -o /var/mail/$USER POPサーバ
実際に, メールが /var/mail/$USER に取り込まれるかどうか確認します.

● smpost
smpost は たつろうさんのページに説明されている方法でインストールします. 適当なディレクトリで展開して, ルートで install.sh , ユーザーで user.sh を実行するだけです. ここで必要なのは, /usr/local/bin/smpost が実行可能であることと, 以下の環境変数を設定することです.


setenv	SMPOST_EMAIL_ADDR	'Hoge Hogeo < hoge@hoge.com >'
setenv	SMPOST_SMTP_SERVER	smtp.hoge.com
setenv	SMPOST_DRAFTS		~/.mqueue/
setenv	SMPOST_SENT		~/Mail/sent/

smpost の配布ファイルには, /usr/local/share/nemacs/lisp/mh-e.elc などが含まれていますが, MH の mini package も既に導入されている 場合は, この環境で実際に smpost -d が使えるかどうかを試すと 良いかもしれません. そのときは, デフォルトの SMPOST_DRAFTS は ~/Mail/drafts です.

● 偽sendmail (これもたつろーさんのページから)
smpost を使うときに, 自ホストの sendmail に直接メールを投げるような MUA の場合は, 偽sendmail で一度 ~/.mqueue にメールをためてから smpost で実際にサーバの sendmail に投げられる, という記述が たつろうさんのページにあります. VM も, まさにそのようなプログラムで, vm.elc に呼ばれた sendmail.el が実際に sendmail にメールを投げます. そこで, この偽sendmail を /usr/sbin/sendmail として置いて, chmod 755 /usr/sbin/sendmail すれば, $mailqueue (デフォルトでは ~/.mqueue) に投げられた メールをためこんでおきます. 偽sendmail は簡単なシェルスクリプトなので, 目を通されると良いかと思います.

● VM 本体および関連ツール
・VM 本体に含まれるもの:
vm-*.el (VM 本体. nemacs でバイトコンパイルして最終的に vm.elc にする)
tapestry.el (buffer や window の状態についての関数)
・nemacs の elisp ライブラリから持って来るもの :
sendmail.el (メールを送信するときに必要)
mail-utils.el (メールを操作するときの諸々の関数)

以上の lisp のソースは, vm-2.53.tar.gz を展開して出来た
ディレクトリに全て放り込んで,

% make VM

とすると全ての *.el がバイトコンパイルされます. でも, vm-*.el をバイトコンパイルする段階で sendmail.el と mail-utils.el が見えない, と怒られるので, sendmail.el と mail-utils.el は先に /usr/local/share/nemacs/lisp に置いておくか, 出来た sendmail.elc と mail-utils.elc をコピーしておきます. と, 気を取り直してもう一度 make VM すると, mule だとやはり warning が出まくりますが, nemacs だときれいに make できるはずです. 出来た *.elc ファイル (vm.elc と tapestry.elc)を, /usr/local/share/nemacs/lisp にコピーします.

・nemacs の ソースから持って来るもの :
もう一つ, /usr/local/share/nemacs/etc/movemail というツールが 必要です. movemail は VM がメールスプールからバッファにメールを取り込むときに 内部で呼ばれます. これは, nemacs の mini パッケージには入っていません. ということで, nemacs のソースから
movemail.tar.gz にまとめましたので, 持って行ってください.

% tar zxf movemail.tar.gz
% cd movemail
% ln -s . ../hoge (ヘッダーをごまかすため)
% gcc -o movemail movemail.c
出来た movemail を /usr/local/share/nemacs/etc にコピーします.

・VM のための設定:

$HOME/.vm (VMが起動するときに読まれる, lisp で書く) を わしは以下のようにしています.

; VM がメールをためこんでおくディレクトリ
(setq vm-folder-directory "~/Mail/") 
; 起動時に一覧表示
(setq vm-startup-with-summary t)
; MH の inbox みたいなもの
(setq vm-primary-inbox "~/Mail/INBOX") 
; 以下の二つは明示したらうまくいった
(setq mail-header-separator "--------")
(setq sendmail-program "/usr/sbin/sendmail")
$HOME/.emacs

(setq kanji-display-code 0)
(setq default-process-kanji-code 2)
(autoload 'vm "vm" "Start VM on your primary inbox." t) 
これで, 自分の POP サーバにテストメールを送っておいて,

% pop
とすると, /var/mail/$USER にメールが取り込まれます.

% nemacs -f vm
とすると, 一覧表示モードで VM が起動するはずです. そこで, スペースキーでメールの内容を表示できます. でもって, r で, そのテストメールに reply するなり, m で新たにメールを書くなりできますでしょうか. メールを書いたら, C-c C-c で送信(実際は $HOME/.mqueue/1 という ファイルが出来る)されます. 次に

% smpost -d
で, SMTPサーバにメールが送られ, さらに $HOME/Mail/send に保存されます.


VM の説明は VM の紹介 を参考にしましたが, パッケージに付属の info を日本語訳して html化した ものが
(vm-jp)TOP
にあります. これは cgi で info2html していますので, ローカルで 読めません. それをまとめたのが下. vm-jp.tar.gz (19 KB)
vm-jp.info を html化してローカルディスクのブラウザで見られるように したもの.
vm-jp.gz (21 KB)
nemacs で texinfo-format-buffer したもの. nemacs の info で読めます.
東工大の ftp サイトには古い VM があります
一応, ここにも置いておきます. vm-5.35.tar.gz (92 KB)
VM の本体.
movemail.tar.gz (13 KB)
vm から呼ばれる movemail と fakemail (必要ないかも) のソースと必要なヘッダを nemacs-3.3.2 のソースから拾って来たもの.
vm-5.35-mini.tar.gz (70 KB)
以上の movemail, *.elc をコンパイルしたものです. PocketBSD 上で make するのがうざいという方や, gcc がない 方のために作っておきました.

●VM 5.35 では出来ないこと:
・日本語ヘッダの MIME のエンコード, デコード. (日本語ヘッダのメールなんて読まない(笑)).
・ときどき nemacs のバッファの表示が乱れるが, とりあえず使えます.
・smpost に渡すメールの日本語コードは自分で jis にしておかなければ ならないのは, mh-e の場合と同じです.
・マルチパートには当然対応していません.
・宛先の alias が使えない. これはなんとかしてみたいです.
・VM を起動すると, 最初エラーが出ることがありますが, 「M-x vm」で再度 VM を起動して, 「g」とすると, 新規に到着したメールを 取り込めます. この問題は調査中です.

2. さらに

● ML 上で掛水さんから以下のような情報をいただきました. (thx> 掛水様)

・ 日本語ヘッダの問題
上の東工大の ftp サイト, あるいは本サイトから vm-5.35W.tar.gzの パッチをあてて, mm を導入すると日本語ヘッダの MIME を 扱うことができるそうです. ちょっとだけ容量は大きくなりますが, MH に較べればどうってことないでしょう. インストール方法は, ソースのドキュメントに詳しくあります.

・ movemail って要らないんじゃあ
popclient で直接 INBOX にメールを取り込めば, こんな感じに

  popclient -3 -k -u XXXXXXX -o ~/Mail/INBOX XXXX.XXXX.co.jp
movemail は要らないようです. わしもやってみましたが, ちゃんと「未読」として新しいメールが VM で扱われます.

●さらに追加情報!
ML で関根さんからさらなる情報です. (thx> 関根様)
・nemacs では, 5.72 まで使える(スレッドにも対応しているそうです). 5.72 はこちらで
・MIME 対応については ここから辿れます.

● Wanderlust も使えるそうだ.
再び掛水さんから (thx> 掛水様) Wanderlustも使えるという 情報をいただきました. IMAP 対応. 最強のメーラーといった感じです. ポケビユーザーもいらっしゃるらしいです.