-
dot-qmailはメイルメッセージの配送を制御します。
-
メイルは通常、受信者(user)のホームディレクトリのメイルボックス(Mailbox)に配られます。
しかし、
別のファイルやディレクトリへの配信、
別アドレスへの転送、メイリングリストへの配送、
あるいはプログラムの実行なども指定できます。
- dot-qmailファイルの書き方
- dot-qmailファイルの安全な編集方法
- 拡張アドレス
- エラー処理
dot-qmailファイルの書き方
配送方法を指示するにはホームディレクトリに
'.qmail'(dot-qmail)ファイルを作って
「行単位」に配送の指示を書きます。
qmail-local
がこれらの指示を順に処理します。
指示には
(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)
アドレスが英数字で始まっているときは'&'は省略できます。
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の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ファイルを安全に編集するには以下のようにしてください。
拡張アドレス
qmailではユーザ(user)は自分のアカウントであるuserだけでなく、
user-anythingという形式のメイルアドレスも管理します。
user-anythingへのメイル配送は
~user/.qmail-anythingにより決められます。
(ただし、システム管理者はこの方式を変更することが出来ます。
qmail-users(5)を参照)
一般ユーザ以外のアドレスは疑似ユーザaliasが管理します。
例えば、localへのメイルは~alias/.qmail-localにより
配送設定できます。
以下の記述では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(または.qmail-default)に設定しますが、
そのとき、.qmail-ext-ownerの有無を調べます。
あった場合、local-owner@domainを
転送メッセージの表書き発信者とします。
ないときは元の表書き発信者をそのまま使います。
ただし、表書き発信者が空アドレスや#@[]の場合、
つまり差戻しメイルの場合、元表書き発信者を保存します。
- 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)