MH のどうでもいいような趣味の講座


「MH 中級者以上向け〜どうでもいい(笑)ような趣味の講座」
 ◎Appendix 2: .forward ファイル ミニ講座
.forward ファイルは、 個人用のメール受付をカスタマイズできるものであり、 基本的には届いたメールを「転送」する宛先を書いて おくファイルで、 aliases ファイルの :include: 形式同様のリストを持つことが可能である。 これを用いることで、 ことが可能である。
○ ~/.forward ファイルの仕組み

送られてきたメールは、そのマシンの sendmail/sendmail.cf で処理され、 届いたメールの宛先が自サイトのユーザ (ローカルユーザ) への配送であるか どうかを、sendmail.cf のルールセットで判別する。 ローカルユーザである場合は、

  1. システムの alias (/etc/aliases や /usr/lib/aliases など) ファイルに従う
  2. 各自の .forward ファイルに従う
  3. sendmail.cf のローカル配信エージェント (Mlocal の指定) に従い、 メールスプールディレクトリへ配信する
の順に処理される。

alias ファイルで、特殊な転送指定や、 アドレスの前に 「\」をつけてある場合を除き、 通常のメールであれば sendmail は そのユーザの .forward ファイル 読出を試みる (手順2)。
.forward ファイルが "正しく" かつ "安全に" 読めた場合、 sendmail はその内容に従う。記述内容は 1つ以上の "受信人"のアドレスであり、 複数の場合は「,」で区切り併記するか、1行に1アドレスを書き並べる。 その "受信人"のアドレスとは上述の様に、 実際の電子メールアドレス・ファイル名・パイプ+プログラム の いずれかである。

以上に該当しない場合には、 sendmail.cf のローカル配信エージェント (Mlocal の指定) に従い、 メールスプールディレクトリへ配信する。 通常 /bin/mail などである。

○ メールを転送する

この様に、.forward ファイルに電子メールアドレスを記述すれば、 メールは転送される。従って理論的には、転送先のマシンの .forward ファイルをさらに別のマシンを指定…と、連鎖的に記述すれば、 一つ一つ転送されることになっている。が、

ので気をつけて貰いたい。 後者は設定ミスなどで .forward の無限ループが出来てしまった場合、 永久に転送されるのを防ぐために、sendmail.cf の Oh (O MaxHopCount) で 最大転送ホップ数が制限されている (通常 17 や 20 程度) ために、 たとえ正しい転送であってもあまり多過ぎるとエラーとみなされるためである。

○ メールをファイルへ追加する

「/」から始まる絶対パスをつけたファイル名を直接記述することで、 そのファイルにメールを落すことが可能である。~/.forward ファイルに

\hayashi, /home/hayashi/Mail/allmail.backup
などと指定すると、メールは、 「\」によりエイリアスを解釈せずに Mlocal に配信され、メールスプールに 貯められ、かつ "/home/hayashi/Mail/allmail.backup" というファイルにも追加される。
実際には sendmail が 実効 uid/gid を変更できる様に fork(2) を実行し、 その子プロセスに配信を任せる形になる。 但し、V8 以前の sendmail では、ファイルへの書き込みに関して マトモなロックを行なわないので、書き込み時にファイルがおかしくなる 可能性もあるので、後述する slocal などのプログラムを用いる方がよい。

○ メールをパイプ経由でプログラムに渡す

プログラム名の前に「|」(パイプ)をつけ記述することで、 sendmail はそのプログラムに 標準入力でメールを引き渡す。 記述形式は

| program
"| program arg"
|"program arg"
のいずれかである。program は絶対パス名で指定し、 引数を取る場合は 引用符で括る必要がある。
実際には sendmail は プログラムを実行するために、 プログラム配信エージェント (Mprog) の A= で与えられる引数 を実行する。 通常は "/bin/sh -c" が 与えられているので、つまりは
/bin/sh -c "program arg"
を行なったのと同意となる。 例えば
\hayashi, "|/usr/ucb/lpr"
は、hayashi さんのメールスプールに配送 + Bourne Shell 経由で 「cat メール | /usr/ucb/lpr」することになる。

この様にプログラムにメールを "食わせる" ことが可能であるので、 メール自動分配・自動お返事などの様々なプログラムを作り、 個人的に設定することが可能である。 勿論、色々なエラーや失敗 も考えられるので、充分注意して試して貰いたい。


○ sendmail との関係

なんか "forward" + "sendmail" で検索して引っかかって来る方が多いようなんで、 補足をば。[06Nov1998]

~/.forward が効かない場合、次の点をまず疑ってみましょう。

telnet smtp で expn してちゃんと forward が効いているかどうかを 確認しておくのがよいでしょうね。
© Haruhisa Hayashi 1992,1997,1998
気まぐれにより個々のファイル名を変えてしまう可能性もありますので、 Link/Bookmark される場合は、 %7Ehayashi/internet/mh_guide.html にお願いします。
目次へ 第0章へ 第1章へ 第2章へ 第3章へ
直接このファイルに飛んで来た場合… フレーム版メニューへ
by はやし はるひさ hayashi あっとまーく laic.u-hyogo.学術.日本