(このページは書いてる途中)
最小の!?メール環境に挑戦
0. 前置と方針
まずは, 聖典&
たつろーさんの
ページ
に行って, ポケビにふさわしいメール環境について勉強させていただきました.
わしは母艦では sendmail + mule + mew + impost という標準的(?)な
メール環境で過ごしておりますが, ポケビでだって当然出来ないことは
ありません. が, 確かにこの環境では, むちゃくちゃ重いしデカいことが
予想されます. で, 皆様どうやって過ごしておられるのかというと,
・聖典お勧めの環境
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 ソフトだということを知り,
トライしたのですが, どうも現在では nemacs はサポートされて
いないようでした. make すら通りませぬ(これはわしの技術不足?).
このことをポケビのメーリングリストで質問してみたところ,
「古い VM
なら動くよ」ということを教えていただき,
早速わしもチャレンジしてみました.
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.35.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 サーバにテストメールを送っておいて,
とすると, /var/mail/$USER にメールが取り込まれます.
とすると, 一覧表示モードで VM が起動するはずです.
そこで, スペースキーでメールの内容を表示できます.
でもって, r で, そのテストメールに reply するなり,
m で新たにメールを書くなりできますでしょうか.
メールを書いたら, C-c C-c で送信(実際は $HOME/.mqueue/1 という
ファイルが出来る)されます. 次に
で, SMTPサーバにメールが送られ, さらに $HOME/Mail/send に保存されます.
VM の説明は
VM の紹介
を参考にしましたが, パッケージに付属の info を日本語訳して html化した
ものが
(vm-jp)TOP
にあります. これは cgi で info2html していますので, ローカルで
読めません. それをまとめたのが下.
vm-jp.tar.gz (19 KB)
vm-jp.info を html化してローカルディスクのブラウザで見られるように
したもの.
東工大の 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 では出来ないこと:
・日本語ヘッダの MIME のエンコード, デコード.
(日本語ヘッダのメールなんて読まない(笑)).
・ときどき nemacs のバッファの表示が乱れるが, とりあえず使えます.
・smpost に渡すメールの日本語コードは自分で jis にしておかなければ
ならないのは, mh-e の場合と同じです.
・マルチパートには当然対応していません.
・宛先の alias が使えない. これはなんとかしてみたいです.
・VM を起動すると, 最初エラーが出ることがありますが,
「M-x vm」で再度 VM を起動して, 「g」とすると, 新規に到着したメールを
取り込めます. この問題は調査中です.