1. DJB/netqmail/man/dot-qmail
Contents
1.1. dot-qmailの使い方 (前野年紀 訳)
dot-qmailはメイルメッセージの配送を制御します。
- メイルは通常、受信者(user)のホームディレクトリのメイルボックス(Mailbox)に配られます。
しかし、 別のファイルやディレクトリへの配信、 別アドレスへの転送、メイリングリストへの配送、 あるいはプログラムの実行なども指定できます。
1.2. dot-qmailファイルの書き方
配送方法を指示するにはホームディレクトリに '.qmail'(dot-qmail)ファイルを作って 「行単位」に配送の指示を書きます。
- qmail-local がこれらの指示を順に処理します。
訳注: 拡張アドレスの項も参照のこと。参照するdot-qmailファイルが異なる。-- ToshinoriMaeno 2021-04-28 11:32:24
指示には (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 &me@new.job.com (New Address)
アドレスが英数字で始まっているときは'&'は省略できます。
- 転送の場合qmail-localは新たなReturn-Pathはつけないことに注意せよ。
「mboxファイル」行は '/'または'.'で始めます。 '/'で終えてはいけません。
/home/djb/Mailbox.sos
- この行はファイル名だと解釈され、qmail-localはメイルを mbox形式でファイルに追加しますが、 そのとき可能ならflock方式の排他制御(ロック)を使います。
- 警告:
- 多くのシステムではファイルを読める人はflockも出来ます。 ということはqmail-localのメイル配送を永久に邪魔できるということです。 誰にでもアクセス可能なファイルにメイルを配ってはいけません。 ファイルのロックはできたが、書き込みに問題があった場合 (例えば、ディスクが満杯になったなど)、 ファイルは元の長さに切捨てられます。 しかし、このやりかたでも配送中にシステムクラッシュが起きれば、 メイルボックスの破壊は避けられません。
「maildir(メイルディレクトリ)」行は '/'または'.'で始まり、'/'で終る行です
/home/djb/Maildir/
- の行はmaildir形式のディレクトリへの配送を示します。 maildir形式を使えば、メイル受け取りの信頼性が高くなります。
1.3. 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は配送を中止し、一時エラーを報告します。
1.4. dot-qmailファイルの安全な編集方法
メイルは届く時刻が決っていません。 dot-qmailファイルを安全に編集するには以下のようにしてください。
- ホームディレクトリのsticky bitをセットします。
chmod +t $HOME
- こうすることで、あなたへのメイルの配送を一時的に中止します。 ホームディレクトリがグループあるいは ワールドで書き込み可能になっている場合も同様です。 編集が終ったら、
chmod -t $HOME
- を忘れないように。以下のようにして、dot-qmailをテストしておくといいでしょう。
qmail-local -n $USER ~ $USER '' '' '' '' ./Mailbox
1.5. 拡張アドレス
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はメイルを差戻します。
警告:
qmail-localは安全のためにext中の点(dot)はすべて コロン(colon)で置き換えてから.qmail-extを調べます。 また、使用の便宜のため、ext中の英大文字は英小文字に変換します。
1.5.1. 転送と .qmail-ext-owner
メイルを転送する場合、 .qmail-ext(または.qmail-default)に設定しますが、 そのとき、.qmail-ext-ownerの有無を調べます。
- あった場合、local-owner@domainを 転送メッセージの表書き発信者とします。 ないときは元の表書き発信者をそのまま使います。
ただし、表書き発信者が空アドレスや#@[]の場合、 つまり差戻しメイルの場合、元表書き発信者を保存します。
1.5.2. 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 であるように見えるようになります。
1.6. エラー処理
配送指示がフェイルすると、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)