maildropはローカルメール配達エージェントを置き換えるためのもので、 フィルタ言語を持っています。 システム管理者は既存のメール配達エージェントをmaildropで置き換えることもできますし、 既存のメールシステムの'プログラムへの転送'機能によりユーザレベルで maildropコマンドを起動することもできます。
maildrop は最初に標準入力からメールメッセージを読み取ります。 余分な改行は自動的に取り除かれます。メールメッセ—ジは 複数のヘッダ行、空行1行、メッセージの本文から成ります。 メッセージの最初にはmbox形式のような From_ 行があってもかまいません。 もしメッセージに From_ 行が含まれない場合、maildrop は必要ならそれを作成します。
もし /etc/courier/maildroprc ファイルが存在する場合、 メールの配達やフィルタリングの指示はそのファイルから読み込まれます。 maildropへの配達・フィルタリング指示により、メールを 指定のメールボックスに格納したり、破棄したり、 送信者に送り返したり、あるいは別のメールアドレスへ転送できます。
/etc/courier/maildroprcが存在しなかったり、 あるいはそのメッセージが配達指示により処理済にならなかった場合、 maildropはメール配達の指示を $HOME/.mailfilterファイルから読み込みます。 もしこのファイルがなかったり、 あるいは配達指示によりメッセージが処理済にならなかった場合、 maildropはメッセージを標準のメールボックスに格納します。
maildropは標準のmailbox形式での格納はもちろん、 maildir形式で格納することもできます。 maildir形式とは Courier と Qmailメールサーバで用いられる、 ディレクトリベースのメールボックス形式です。 他の多くのメールサーバがmaildir形式を扱えます。 mailbox形式で配達される場合には、maildropは配達の間じゅうメールボックスをロックします。
あるメールプログラムはメッセージをファイルに書き出す時、From_ ヘッダの前に1行の空行を出力します。 このため、maildrop はメッセージの最初の空行を無視します。 よって、maildrop はすべてのメッセージに最低でも1行のヘッダが必要となります。
これがmaildropの標準的なメール配達のふるまいです。 maildropの起動時に指定される配達のモードによっては、ふるまいに細かな違いがあります。 maildropには3種類の主要な動作モードがあります:
配達の指示をする filenameファイルが起動時に引数として指定されます。 maildrop は ( /etc/courier/maildroprcファイルの後) filename ファイルを読み込み、 その配達指示に従います。 メッセージが配達指示により転送や送り返し、削除、指定メールボックスへの格納が されない場合には、 そのユーザのメールボックスに格納されます。
maildrop はメールサーバの配達用エージェントとして起動されます。 コマンドラインにfilenameが指定されない場合、maildropは配達モードとして起動します。 maildropはカレントディレクトリをユーザのホームディレクトリに設定し、/etc/courier/maildroprcファイルを読み取り、次に $HOME/.mailfilterファイルを読み取ります。
maildropは他のアプリケーションの一部として動作します。 組み込みモードはCourierメールサーバにおいて受信した中継メールを直接フィルタリングするために 使われており、不要なメールをローカル配達エージェントに回す前に拒絶できます。 下記 -m あるいは -M オプションが指定された時に組み込みモードになります。 組み込みモードについて詳しくは下記を参照してください。
maildropをrootにsetuidしても安全です。 Courier のデフォルトではmaildropは組み込みモードでの動作のため、rootにsetuidした状態でインストールされます。 rootユーザがmaildropを実行した場合 (あるいはrootにsetuidされている場合)、 -dオプションをメッセージの受信者を指定するために用いることができます。maildropは起動後すぐに -dオプションで指定されたユーザに実効ユーザIDを変更します。 そのユーザの$HOME/.mailfilterファイルが (あれば) 読み込まれ、 そしてメッセージは指定されたユーザ向けに配達されます。
システム管理者はmaildropの -dオプションの使用をメールシステム自身にのみ限ることができます。
配達モードの場合、maildropはユーザのホームディレクトリのスティッキービットが立っていたらすぐに、 終了コードEX_TEMPFAILで何もせずに終了します。 EX_TEMPFAIL終了コードを受信したメールサーバはそのメッセージを後で配送するように 再手配します。 $HOME/.mailfilterを編集中にスティッキービットを立てておくことにより、 その間に到着したメールを一時待ってもらうことができます。
maildropはまたユーザのホームディレクトリに他者書き込み権がある場合にも 終了コードEX_TEMPFAILで終了します。
maildrop はさらに指定されたfilenameがそのユーザのものでなかったり、 あるいはグループや他者になんらかのアクセス権がある場合には 終了コードEX_TEMPFAILで即座に終了します。このアクセス権には読み取り権も含まれます。 よって$HOME/.mailfilterファイルはそのユーザの読み書き権のみ与えられていなければなりません。
特殊な組み込みモード(下記参照)を実行中の場合、 maildropは$HOME/.mailfiltersディレクトリが対象ユーザ所有でなかったり、 あるいはグループや他者になんらかのアクセス権がある場合には、 終了コードEX_TEMPFAILで即座に終了します。
maildrop は高度に最適化されており、リソースの必要量は最小限に抑えられています。 小さめのメッセ—ジならmaildropはそれをメモリに読み込み、フィルタリングや配達はメモリから直接実行されます。 大きめのメッセージはファイルを直接アクセスします。 標準入力がファイルでない場合にはmaildropはそれを一時ファイルに書き込み、その一時ファイルをアクセスします。 メッセージの配達が終わると一時ファイルは自動的に削除されます。
メッセージにヘッダを追加します。配達しようとするメッセージのヘッダに -A "Foo: Bar"で指定されたものが追加されます。
メール配送エージェントは通常、 ローカルメールボックスに配達するメールになんらかのヘッダ項目を追加します。 これはメール配送エージェントがローカルメール配達エージェント - たとえばmaildrop - にパイプ経由でメッセージを送信する流れの中で実行されます。 maildropはメッセージをパイプ経由で受け取ると、それをメモリに全て保持するか、 一時ファイルに書き出さなければなりません。
-Aオプションの利用しヘッダをmaildrop側で追加させることより、 メール配送エージェントはメッセージのファイル自身をmaildropの標準入力に直接渡すことができます。maildropは標準入力がファイルの場合、一時ファイルを必要としません。 複数の-A オプションが指定可能です。
maildropを指定されたユーザの配達モードとして動作させます。
システム管理者が-dオプションの利用をメールシステム自身に限っている場合、 このオプションは一般ユーザには利用できません。 その場合でも、-dオプションで指定されるuserがmaildropを起動したユーザと同じ場合には使用できます。 また、この -dオプションがちゃんと動作するには、 maildropがrootから実行されるか、あるいは maildrop がrootにsetuidされている必要があります。 filenameが指定されない maildropの実行はそのコマンドラインに実行ユーザの-d オプションが指定されたものと仮定されます。
-dオプションが指定されない場合、オプション後の最初の引数は フィルタリング指示が書かれたファイル名であると解釈されます。 残りの引数があれば、$1、 $2、…と順に代入されます。( 「環境」 と 「変数の置き換え」を参照)
FROM変数 (メッセージのエンベロープ送信者) を addressに設定します。システム管理者が -f の使用を無効にしている場合、一般ユーザには使用できません。
maildropを組み込みモードで実行します。-mオプションと -dオプションを同時に指定できますが、そうする意味はないでしょう。 たとえあなたのメッセージを別の人の.mailfilterで処理したい場合でも、 その.mailfilterには組み込みモードでは使えない指示が含まれていることでしょう。
filename引数を指定する必要があります。filenameにはmaildropを組み込みモードで実行する場合のフィルタリング指示が含まれます。 -mオプションは、あとで$HOME/.mailfiltersのフィルタに設定する予定のフィルタリング指示ファイルを デバッグする目的で使用できます。あるいは-M オプションと共に使用されます。
maildropを特殊な組み込みモードで動作させます。 -M が指定されて -dオプションが指定されない場合は、maildropを実行したユーザの-dオプションが指定されていると仮定します。
-dオプションの場合と同様な事項か適用されます。 maildropがrootから実行されるか、あるいは maildrop がrootにsetuidされている必要があります。 maildropは起動後すぐに -dオプションで指定されたユーザに実効ユーザIDを変更してルートの権限を放棄した後、 $HOME/.mailfilters/filterfileファイルを読み込みます。 セキュリティのため、ファイル名はスラッシュではじまったり ピリオドを含んではいけません。 maildropはとても頑固であるため、 $HOME/.mailfiltersディレクトリと $HOME/.mailfilters/filterfileファイルはそのユーザに所有され、 グループや他者にはアクセス権はあってはいけません。
-Mオプションはメールアプリケーションを実行するユーザと、 組み込みモード用フィルタを作成するユーザとの仲を取り持ちます。 メールアプリケーションを実行するユーザは、 別のユーザが用意したフィルタを用いた場合に それが変になったりメールを送り始めたりファイルを作成しはじめたりしないことを 確認できます。 フィルタを用意するユーザは、フィルタが実行される時の環境変数がきれいで、 想定できないような状態にはならないことを保証します。
maildrop は"デフォルト"フィルタをサポートします。 もし-M で指定されたファイルが$HOME/.mailfiltersディレクトリで見つからない場合、 maildropは代わりに $HOME/.mailfilters/filterfileprefix-defaultを開こうとします。 filterfileprefix とは指定された filterfile の最後の '-' 以降を取ったものです。
もし $HOME/.mailfilters/filterfileprefix-defaultも存在しなかったら、その前の '-' …というように、 maildropは次々に '-' 以降を取りのぞいて同じようにファイルを開こうとします。
最終的にはmaildropは$HOME/.mailfilters/defaultファイルを開こうとします。
例えば、-M オプションで指定された引数が mailfilter-lists-maildropの場合、maildrop は次の順でファイルを開こうとします:
$HOME/.mailfilters/mailfilter-lists-maildrop
$HOME/.mailfilters/mailfilter-lists-maildrop-default
$HOME/.mailfilters/mailfilter-lists-default
$HOME/.mailfilters/mailfilter-default
$HOME/.mailfilters/default
注:maildrop が "デフォルト" のファイルを開こうとするのは-M オプションの場合のみです。
このオプションはmaildropのCourierメールサーバとの統合版で使用するために予約されています。
VERBOSE変数を levelに設定します。 maildropは全体を実行の前に解析するので、 このオプションは解析フェーズでのデバッグ出力に用いられます。 filenameファイルが構文エラーを含む場合、環境変数 VERBOSEが設定されていないと何もデバッグ出力がされません。
-Vオプションはmaildropが配達モードの場合には無視されます。
引数にfilenameが指定されないか、 -dオプションが指定された場合は、maildropは配達モードとして動作します。 このとき、maildropは-dオプションで指定されたユーザ (-dオプションが指定されない場合は起動ユーザ) のホームディレクトリに移動し、 $HOME/.mailfilterファイルからフィルタリング指示を読み取ります。$HOME/.mailfilterファイルは当該ユーザにより所有され、 グループや他者にアクセス権があってはいけません。 (そうでない場合はmaildropは終了します。)
$HOME/.mailfilterファイルがない場合は maildropは単にそのユーザのメールボックスにメールを配達します。
もし/etc/courier/maildroprcファイルが存在するときは、maildropは先にこのファイルを読み取り、次に $HOME/.mailfilterファイルを読み取ります。 これによりシステム管理者がすべてのユーザに適用される 共通フィルタを設定することができます。
注: | /etc/courier/maildroprcファイルは配達モードの場合にのみ読み取られます。 |
組み込みモードは、maildropの配達機能は不要だけど、フィルタリング機能を使いたい場合に 使用されます。 組み込みモードの場合 maildropは他のアプリケーションから -m オプションか -M オプション付きで起動されます。 maildropはメッセージを読み取り、指定されたfilenameファイルからフィルタリング指示を読み込みます。
filenameには以下のものを除くフィルタリング指示を記述できます:
通常filenameによる指示でメッセージが明示的に配達されなかった場合には ユーザの標準メールボックスに配達されますが、 組み込みモードの場合にはこの動作もありません。
組み込みモードのmaildropと呼び出したアプリケーションは、 filename中のechoコマンドや EXITCODE環境変数により通信することができます。
maildropは組み込みモードで動作中、/etc/courier/maildroprcs/で始まるファイル名をincludeコマンドで指示された場合、それを処理している間 組み込みモードの上記の制約を一時解除します。 その/etc/courier/maildroprcs中のファイルからさらにincludeコマンドで指示されたファイルの処理中も同様に制約が解除されます。 /etc/courier/maildroprcs中のファイルを処理し終わると、制約は復活します。
システム管理者はこれを利用し、 ` ... ` xfilterによる外部プログラムの実行を制御下に置くことができます。
ファイル名にはピリオドを含むことはできません。 (include "/etc/courier/maildroprcs/../../home/user/recipe"というような抜け道は使えません。)
/etc/courier/maildroprcsディレクトリ内のファイルの実行の前に、 maildropは次の環境変数を自動的に初期値にリセットします: DEFAULT、HOME、 LOCKEXT、 LOCKSLEEP、 LOCKTIMEOUT、 LOCKREFRESH、 LOGNAME、 PATH、 SENDMAIL、SHELL。 なお注意として、maildropが/etc/courier/maildroprcs内のファイルを処理し終わっても、これらの環境変数の値は元の値には戻りません。
maildropは走りつづけるフィルタリングを防止するためウォッチドッグタイマを持っており、 もしフィルタリング処理が指定時間内(通常5分、システム管理者が設定)に終了しない場合にはmaildropは終了します。
ユーザのホームディレクトリやその他の情報。 NIS/YPがインストールされている場合はそれも利用されます。
配達モードで用いられる、共通のフィルタリング指示用ファイル。
システムのメールボックス。 (実際のディレクトリ名はシステム管理者の設定によります。)
メール転送用プログラム。 (実際のプログラム名はシステム管理者の設定によります。)
配達モードで用いられる、フィルタリングの指示用ファイル。
特別な組み込みモードで用いられる、ファイルが格納されたディレクトリ。
dotlock(1), maildropfilter(5), makedat(1), maildropgdbm(5), maildropex(5), reformail(1), makeuserdb(1), makemime(1), reformime(1), egrep(1), grep(1), , courier(8), sendmail(8), http://www.qmail.org.