《用語説明・注釈》
【目次】
「Mh中級者以上向け〜どうでもいい(笑)ような趣味の講座」
これは私が大昔(!)に当時居た大学の学科内ニュースグループ設立記念(笑)に 書いたもので、それをちょいと加筆修正したものを html 化してみたものです。 リスト表示や ftp のあたりをもっとちゃんとしないと…と思う日々。
【第0章】
第0.5回: なんでこんなもん書くんかの言い訳の言い訳(笑)
元の文章を書いた時点では、 確か MH のバージョンは 6.7.2 だったんじゃなかったか知らん? その後、私もちょっと噛んだんですが、バージョン 6.8 の日本語化の作業が あって、高田@NTTさんを中心とした MH68-jp による mh-6.8-jp2 が出たんですね。
6.8 になって変更された部分に加えて、日本語化パッチでは RFC-1522 形式の MIME encode/decode な拡張等を行なったんで、 6.7.2 時点の話と細かい点でかなり変わってきてます。 現在は「MH」というとこの jp2 を標準とする現状なので、 ちょーっとその部分を改定・追加ツッコミしてみました。 でも、mh-6.8 の日本語化作業自体は 1992 年頃のことなんで、 既に記憶の彼方に飛んでいってしまって(^^;;)ますので、 これを読まれている皆さんの方がよくご存知かも知れません:-)
【第1章】
MH
Mail (または Message) Handler。 元はRAND社の製品であったが、現在はパブリックドメインソフトウェアである。 現在、 カリフォルニア大アーヴィン校(当時)の John Romine氏・Marshall T.Rose氏らを中心として 開発され続けている
数多くのメール関連コマンドプログラムのパッケージ
各個人の使用方法にもよるが、お蔭(?)で全然使わないコマンド(プログラム) というのもある。また MH 全体のソースファイルも膨大なものになっているので、 パッチ作成等の際の整合性・形式統一・バグ取りには苦労する…。
.mh_profile
inc/scan…等の MH (のコマンドいづれか)を初めて使用する際に、 自動的に作成される
予め指定
勿論逆に言えば、コマンドラインから MH のコマンドプログラムを使用する際に 毎度毎度オプションをきっちり指定する・MH-e から MH を使用する際には MH-e.el を書き換えてオプションを指定する…などのことをすれば、 .mh_profile ファイルを書き換えなくても済む…とも言えなくもないのだが(汗)
ちなみに、MH の各コマンドプログラムは、(正しく man までインストールされている ならば) man で調べるか、もしくはコマンドラインから "-help" オプションをつけて 実行すると、コマンドラインオプション一覧や、 MH のコンフィグレーション時のオプションが表示される
man mh-profile(5)
勿論、MH 関連のマニュアルファイルが 正しくインストールされていることを前提とする。 尚、本稿では MH 6.8 でのマニュアル名を記載してあるが、MH 6.7.2 等の 以前のバージョンでは、マニュアル名自体が異なっているものもあるので注意
収納する
指定しない場合、書きかけのメールは "~/Mail/draft"と "~/Mail/#draft" の 最大2つのファイルにしかならない
指定する
但し、特殊キャラクタである ( ) < > @ , ; : \ " . [ ] は使用できない。 それ以外であっても sendmail 8.x/cf-3.x 以降では、From: 行中のコメント部分 (この例なら「Haruhisa -`Mint'- Hayashi」)が、アドレスと 混同せずに一つの文字列であることを明確にする為に、 英数字以外の記号を用いると 『"Haruhisa -`Mint'- Hayashi"』と コメント部が "" で括られる。
alias ファイル
"aliasファイル" の書き方については、MH の MailAliases ファイル (/usr/local/lib/mh 等の mh の Lib dir にある) を参照のこと
inc したログを残す
段々と大きなファイルになるし、inc したログなどあまり後で参照する こともないと思うので、設定しないほうが無難であろう
表示 format
「MH format」と呼ばれる。第2章にて解説
.mh_sequences ファイルに記録
詳しくは後述するが、この指定を行ない、各メールフォルダディレクトリの .mh_sequences ファイルを「unseen」という文字列で grep すると、 未読のメールの存在・番号が判る
認識させる
後述する MH format の「mymbox()」関数の判別時に使用されるだけであり、 ここに他のアカウントを書いたからと言って、そのメールスプールを読みに 行く…などというものではないので注意
NutShell の 「MH & xmh」本
表紙に「蛸」の絵が描かれているため「タコ本」と呼ばれる。 日本語訳も出てる。訳本が出る前の大昔に、わざわざ取り寄せて原書で 購入したけど…当時の版のには、 mh format の類はあまり載っておらず、本の大半が xmh (MH の X-Window 版。 MH + MH-e + mule が主流の日本ではあまり使用されていない)の 「使い方マニュアル」本であった(;_;)
メール作成用フォーマット定義ファイル
但し、MH の Lib dir にあるこれらのフォーマットファイル自体を直接変更 しても、デフォルトの動作は変わらない。これは上述した comp, repl …などの コマンドプログラムが、デフォルトの動作として これらのフォーマットファイルを読み込んでコンパイルされているため、である
引数等で与えて指定する
コマンドインターフェースプログラムにもよるが、MH-e では空白分について 一つ一つ尋ねてくるようなシステムになっている。 この設定で 例えば MH-e から mh-smail でメールを新規に作成しようとすると、 To, cc, Subject を順に問われることになる。 勿論、その際に入力しなければ、空白のままになる
エラーを起こした時の戻りアドレス指定
但し RFC-1123 に抵触するので、sendmail8.X からは l オプションで 指定していない限り、通常無視されるように変更されているので、 このメールヘッダを指定してもあまり意味がないかも知れない…
コピーしておく
差し出したメールを残しておくには色々な方法があるが、 「Cc: 自分のアドレス」と Carbon-Copy ヘッダ等で自分宛を指示する 場合は、send プログラムから post プログラムに渡され、sendmail 等で 処理されるという、実際に「送信」される形になるのだが、Fcc: での指定では 単に send プログラムがこのメールファイルをコピーするだけであり、 sendmail 等の送信プログラムに引き渡される前の状態である。 尚このヘッダは send プログラムが処理する際に消去される
【第2章】
見当たらなかった
最初この文章を書いた 1992年3月時点から、html化した 1995年5月頃でも、 そして frame 対応化した 1997年3月現在でも、あまりいい本・紹介記事が未だない。 当初は MH フォーマットをいぢる為に、ソースを読む等を行なった。
void 関数でセット
(void ...)としないと、画面に表示されてしまう
ヘッダの違い
当然のことながら、MH フォーマットの { } 等の組込関数は、基本的に メールのヘッダに対して作用するものである。 従ってメール本文中の情報をうまく使って…というのはなかなか難しい
どういうヘッダにどういう形式
ちなみに「X-…:」という形式は、ユーザーが任意に規定しても良いとされている ヘッダである (参照: RFC-822)
また上述したように、MLによってではあるが、メール本文中に「通しメール番号」を つけているところもあるが、その場合はうまく MH フォーマットを作用させることは 難しい
RFC-1522
「RFC-1521,1522 形式」については、RFC-1521,1522 を読んで下さい:-p
「RFC-1521の charset="ISO-2022-JP"」というのは、 「=?ISO-2022-JP?……=?=」な文字列のことです。
ちなみに、この文字列を見て「MIMEメール」とか言う人も居るようですが、 これは飽く迄、MIME ヘッダでの encode/decode 規格であって、 本来の「MIMEメール」とは、Multipurpose Internet Mail Extensions された メールのことですので
噛ませてやるだけで OK
hdecode() を使用したこの format ファイル(一種のフィルタ)を使用することで、 decode されて表示されているだけなので、勿論、元のメールファイル自体は なんら変更(decode)されていないことに注意
偶然ほぼ同時
本当に同じ日(1992年12月17日)のたった2時間ほど違いで投稿(^^;;
【第3章】
このディレクトリのあるハードディスクの パーティション
メールスプールディレクトリ自体は、その WS (OS) によって異なるが、 /var/spool/mail とか /usr/spool/mail とか /var/mail など。 溢れたり、他のディレクトリを圧迫してしまう可能性を考え、 通常基本的に、このディレクトリ (+ /tmp とか) を一つのパーティションに 割り当てたりする。 但し、その WS 次第、その WS の管理者さんの意向次第であり、 必ずしもそうなっていないことも多い
設定すれば良い
パイプ「|」で起動されるのは飽く迄も Borne-Shell であることと、 実行ファイルはフルパスで記述する必要があることの2点に注意
漢字コード変換 filter を噛ませている
ローカルメーラーの /bin/mail に引き渡す前に、漢字変換フィルターを 挟み込んだシェルを用意して、これを Mlocal 行に指定する、ということを 行なう
そういう操作を必要とする場合
逆に言えば、例えば他の人が OpenWindows で EUC る中、自分だけ X11R6.3 + ctwm + kterm + slocal + mule + mh とかで読み書きするのなら、 "なにもしなくてもよい" のだが :-) (うちの場合^^;;)
色々と挑戦して貰いたい
…なんだか偉そうに言ってます(大汗)が、いい方法・いいプログラムが 出来たり、「こういった使い方もあるんだぞー」というのがありましたら、 お教え下されば幸いかと (^^)
【Appendix 2】
アドレスの前に「\」をつけてある
そのアドレスに対するエイリアスの再帰的解釈を防ぐ。 つまりは以後のエイリアスを全て抑制する指定
そのユーザの .forward ファイル
ここで、V8 以上の sendmail であれば、 sendmail.cf の OJ (O ForwardPath) オプションで .forward ファイルを探すパスを指定することも出来る。
# Forward file search path
O ForwardPath=/var/forward/$u:$z/.forward.$w:$z/.forward
となっており、これは $u = user 名、$w = localhost 名、$z = user の home directory を示す。例えば私(hayashi@pollux.hogehoge.ac.jp )の場合であれば、
  1. /var/forward/hayashi
  2. ~hayashi/.forward.pollux
  3. ~hayashi/.forward
の順にサーチする。
読出を試みる
sendmail/sendmail.cf の設定如何であるが、sendmail の実行 UID/GID に 依って、各自の .forward を読む際の permittion が問題になることもある。 また、ディスクを NFS でマウントしているなどと言う際にも、同種の問題が 起こることがある。
また、sendmail は .forward ファイルを読む前に、そのファイルが permittion 的に "安全" であるかどうかを確認し、 "危険" と判断された場合は、その旨の表示を行なったり、その .forward ファイルを 無視したりする
通常は "/bin/sh -c" が与えられている
勿論、この A= の引数の指定を変更したり、sendmail.cf を書き換えて、 特定のアドレスに対しては特定の配信エージェントを使用するように することも可能である
/usr/ucb/lpr
尤も、こんな設定をすると、メールが来るたびにプリンタから出力されてしまう (苦笑)ので、こういうことは普通しない…と思う
色々なエラーや失敗
sendmail は pipe(2) と fork(2) を使って A=引数 (通常は Bourne Shell) を起動し実行するので、 マシンのプロセス数の制限に引っかかったりして、 うまく実行出来ないこともある。
また 実行終了後、正しい exit(2) 値が帰って来たことでメール配送が完了した、 と認識する点にも注意

© Haruhisa Hayashi 1992,1997
気まぐれにより個々のファイル名を変えてしまう可能性もありますので、 Link/Bookmark される場合は、 %7Ehayashi/internet/mh_guide.html にお願いします。
目次へ 第0章へ 第1章へ 第2章へ 第3章へ
by はやし はるひさ hayashi あっとまーく laic.u-hyogo.学術.日本