= DJB/netqmail/man/dot-qmail = <> <> == dot-qmailの使い方 (前野年紀 訳) == dot-qmailはメイルメッセージの配送を制御します。 メイルは通常、受信者(user)のホームディレクトリのメイルボックス(Mailbox)に配られます。 しかし、 別のファイルやディレクトリへの配信、 別アドレスへの転送、メイリングリストへの配送、 あるいはプログラムの実行なども指定できます。 == dot-qmailファイルの書き方 == 配送方法を指示するにはホームディレクトリに '.qmail'(dot-qmail)ファイルを作って 「行単位」に配送の指示を書きます。 qmail-local がこれらの指示を順に処理します。 訳注: 拡張アドレスの項も参照のこと。参照するdot-qmailファイルが異なる。-- ToshinoriMaeno <> 指示には (1) コメント (2) プログラム (3) 転送アドレス (4) mbox (5) maildir の五種類があります。 「コメント」行は'#'文字で始めます。コメント行は無視されます。 {{{ # this is a comment }}} 「プログラム」行は'|'(バー)で始めます。 qmail-localは行の残り部分をshに引数として渡します。 詳しくはqmail-command(8)を参照せよ。 {{{ | preline /usr/ucb/vacation djb }}} 「転送」行は'&'で始めます。残りの部分はメイルアドレスです。 {{{ &me@new.job.com }}} アドレスをqmail-queueに渡します。 アドレスは完全修飾ドメイン名でなければなりません。 また、以下のように空白や三角括弧、コメントを含めてはいけません。 {{{ # the following examples are WRONG &me@new & & me@new.job.com &me@new.job.com (New Address) }}} アドレスが英数字で始まっているときは'&'は省略できます。 me@new.job.com 転送の場合qmail-localは新たなReturn-Pathはつけないことに注意せよ。 「mboxファイル」行は '/'または'.'で始めます。 '/'で終えてはいけません。 {{{ /home/djb/Mailbox.sos }}} この行はファイル名だと解釈され、qmail-localはメイルを mbox形式でファイルに追加しますが、 そのとき可能ならflock方式の排他制御(ロック)を使います。 警告: 多くのシステムではファイルを読める人はflockも出来ます。 ということはqmail-localのメイル配送を永久に邪魔できるということです。 誰にでもアクセス可能なファイルにメイルを配ってはいけません。 ファイルのロックはできたが、書き込みに問題があった場合 (例えば、ディスクが満杯になったなど)、 ファイルは元の長さに切捨てられます。 しかし、このやりかたでも配送中にシステムクラッシュが起きれば、 メイルボックスの破壊は避けられません。 「maildir(メイルディレクトリ)」行は '/'または'.'で始まり、'/'で終る行です {{{ /home/djb/Maildir/ }}} の行はmaildir形式のディレクトリへの配送を示します。 maildir形式を使えば、メイル受け取りの信頼性が高くなります。 == dot-qmailについての注意 == dot-qmailのexecute bitがセットされている場合、プログラム、mbox、maildirの行を 含めてはいけません。 (訳注:つまり、転送だけということです。) qmail-localがそういう行を見つけたら、配送を中止して、一時エラーを報告します。 dot-qmailが存在しないか、完全に空(長さ0)の場合、qmail-localは システム管理者が設定した aliasempty の配送指示に従います。 通常、aliasempty は './Mailbox' と設定されているので、 メイルはmbox形式でMailboxに追加書きされます。 dot-qmailには行末に余分の空白、タブを含んでいても構いません。 空白行も許されていますが、最初の行だけは空白行にしてはいけません。 dot-qmailがグループあるいはワールドに書き込み可能の場合、 qmail-localは配送を中止し、一時エラーを報告します。 == dot-qmailファイルの安全な編集方法 == メイルは届く時刻が決っていません。 dot-qmailファイルを安全に編集するには以下のようにしてください。 ホームディレクトリのsticky bitをセットします。 {{{ chmod +t $HOME }}} こうすることで、あなたへのメイルの配送を一時的に中止します。 ホームディレクトリがグループあるいは ワールドで書き込み可能になっている場合も同様です。 編集が終ったら、 {{{ chmod -t $HOME }}} を忘れないように。以下のようにして、dot-qmailをテストしておくといいでしょう。 {{{ qmail-local -n $USER ~ $USER '' '' '' '' ./Mailbox }}} == 拡張アドレス == qmailではユーザ(user)は自分のアカウントであるuserだけでなく、user-anythingという形式のメイルアドレスも管理します。 user-anythingへのメイル配送は ~user/.qmail-anythingにより決められます。 (ただし、システム管理者はこの方式を変更することが出来ます。[[../qmail-users]](5)を参照) 一般ユーザ以外のアドレスは疑似ユーザaliasが管理します。 例えば、localへのメイルは~alias/.qmail-localにより 配送設定できます。(これもqmail-users(5)を参照) 以下の記述ではqmail-localは local@domain宛のメイルを扱っているものとします。 つまり、localは.qmail-extにより制御されています。 以下のようなことが起きます。 * .qmail-extが空のとき、システム管理者が設定したaliasemptyの指示をみます。 * .qmail-extが存在しなかったら、 デフォルトの.qmailファイル群を以下ように順に探します。 (extがfoo-barだったとします。) . まず.qmail-foo-barを探します。次に.qmail-foo-default、 最後に.qmail-defaultを探します。 これらのどれも存在しなければ、qmail-localはメイルを差戻します。 (例外:dot-qmailがない場合、一般のユーザに対しては qmail-localは空のdot-qmailがあったものとして取扱います。) 警告: {{{ qmail-localは安全のためにext中の点(dot)はすべて コロン(colon)で置き換えてから.qmail-extを調べます。 また、使用の便宜のため、ext中の英大文字は英小文字に変換します。 }}} === 転送と .qmail-ext-owner === メイルを転送する場合、 .qmail-ext(または.qmail-default)に設定しますが、 そのとき、.qmail-ext-ownerの有無を調べます。 あった場合、local-owner@domainを 転送メッセージの表書き発信者とします。 ないときは元の表書き発信者をそのまま使います。 ただし、表書き発信者が空アドレスや#@[]の場合、 つまり差戻しメイルの場合、元表書き発信者を保存します。 === VERP === qmail-localはVERPs variable envelope return pathsを実装しています。 .qmail-ext-ownerと.qmail-ext-owner-defaultとの両方が存在する場合、 表書き発信者としてlocal-owner-@domain-@[]を用いるというものです。 これにより、受信者recip@reciphostには表書き発信者が local-owner-recip=reciphost@domain であるように見えるようになります。 == エラー処理 == 配送指示がフェイルすると、qmail-localは直ちに処理を停止し、フェイルを報告します。 転送(forwarding)は他の指示のあとで処理されますので、 配送中にエラーが起きると転送はまったく実行されないことになります。 プログラム(行)がexit code 99を返すと、qmail-localはdot-qmailの以降の行を 無視しますが、その時までに出会った転送行の処理は行います。 (訳注: 配送は成功したものとして扱われる。qmail-commandを参照) 他の一時的あるいは永続的エラーの影響を受けないように、 それぞれ完全に独立した指示を書きたいときには それぞれの指示を別々のdot-qmailファイルにしなさい。 つまり、 .qmail-extというファイル群を作っておいて、 中心になるdot-qmailにはこれらに転送する指示を書くのです。 qmail-localが多くの転送行を同時に扱えることに注目してください。 ---- envelopes(5), maildir(5), mbox(5), qmail-users(5), qmail-local(8), qmail-command(8), qmail-queue(8), qmail-lspawn(8)