送られてきたメールは、そのマシンの sendmail/sendmail.cf で処理され、 届いたメールの宛先が自サイトのユーザ (ローカルユーザ) への配送であるか どうかを、sendmail.cf のルールセットで判別する。 ローカルユーザである場合は、
alias ファイルで、特殊な転送指定や、
アドレスの前に
「\」をつけてある場合を除き、
通常のメールであれば sendmail は
そのユーザの .forward ファイルの
読出を試みる
(手順2)。
.forward ファイルが "正しく" かつ "安全に" 読めた場合、
sendmail はその内容に従う。記述内容は 1つ以上の "受信人"のアドレスであり、
複数の場合は「,」で区切り併記するか、1行に1アドレスを書き並べる。
その "受信人"のアドレスとは上述の様に、
実際の電子メールアドレス・ファイル名・パイプ+プログラム の
いずれかである。
以上に該当しない場合には、 sendmail.cf のローカル配信エージェント (Mlocal の指定) に従い、 メールスプールディレクトリへ配信する。 通常 /bin/mail などである。
○ メールを転送する
この様に、.forward ファイルに電子メールアドレスを記述すれば、 メールは転送される。従って理論的には、転送先のマシンの .forward ファイルをさらに別のマシンを指定…と、連鎖的に記述すれば、 一つ一つ転送されることになっている。が、
○ メールをファイルへ追加する
「/」から始まる絶対パスをつけたファイル名を直接記述することで、 そのファイルにメールを落すことが可能である。~/.forward ファイルに
\hayashi, /home/hayashi/Mail/allmail.backupなどと指定すると、メールは、 「\」によりエイリアスを解釈せずに Mlocal に配信され、メールスプールに 貯められ、かつ "/home/hayashi/Mail/allmail.backup" というファイルにも追加される。
○ メールをパイプ経由でプログラムに渡す
プログラム名の前に「|」(パイプ)をつけ記述することで、 sendmail はそのプログラムに 標準入力でメールを引き渡す。 記述形式は
| program "| program arg" |"program arg"のいずれかである。program は絶対パス名で指定し、 引数を取る場合は 引用符で括る必要がある。
/bin/sh -c "program arg"を行なったのと同意となる。 例えば
\hayashi, "|/usr/ucb/lpr"は、hayashi さんのメールスプールに配送 + Bourne Shell 経由で 「cat メール | /usr/ucb/lpr」することになる。
この様にプログラムにメールを "食わせる" ことが可能であるので、 メール自動分配・自動お返事などの様々なプログラムを作り、 個人的に設定することが可能である。 勿論、色々なエラーや失敗 も考えられるので、充分注意して試して貰いたい。
なんか "forward" + "sendmail" で検索して引っかかって来る方が多いようなんで、 補足をば。[06Nov1998]
~/.forward が効かない場合、次の点をまず疑ってみましょう。
OJ/var/forward/$u:$z/.forward.$w:$z/.forward8.7(V7)以降は
O ForwardPath=/var/forward/$u:$z/.forward.$w:$z/.forwardという形式で与えられます。ファイル名はコロンで区切られ、 左から順に、読み出しが成功するまで検索されます。 $u はユーザのログイン名、$z はユーザのホームディレクトリが それぞれ入っている定義マクロです。 オプション自体の省略、もしくはファイル名を書かなかった場合は、 $z/.forward がデフォルトとなります。