dot-qmailの使い方 (前野年紀 訳)

dot-qmailはメイルメッセージの配送を制御します。
メイルは通常、受信者(user)のホームディレクトリのメイルボックス(Mailbox)に配られます。
しかし、 別のファイルやディレクトリへの配信、 別アドレスへの転送、メイリングリストへの配送、 あるいはプログラムの実行なども指定できます。
  1. dot-qmailファイルの書き方
  2. dot-qmailファイルの安全な編集方法
  3. 拡張アドレス
  4. エラー処理

dot-qmailファイルの書き方

配送方法を指示するにはホームディレクトリに '.qmail'(dot-qmail)ファイルを作って 「行単位」に配送の指示を書きます。 qmail-local がこれらの指示を順に処理します。
指示には (1) コメント (2) プログラム (3) 転送アドレス (4) mbox (5) maildir の五種類があります。

  1. 「コメント」行は'#'文字で始めます。コメント行は無視されます。
    	# this is a comment
    
  2. 「プログラム」行は'|'(バー)で始めます。 qmail-localは行の残り部分をshに引数として渡します。 詳しくはqmail-command(8)を参照せよ。
    	| preline /usr/ucb/vacation djb
    
  3. 「転送」行は'&'で始めます。残りの部分はメイルアドレスです。
    	&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はつけないことに注意せよ。

  4. mboxファイル」行は '/'または'.'で始めます。 '/'で終えてはいけません。
    	/home/djb/Mailbox.sos
    
    この行はファイル名だと解釈され、qmail-localはメイルを mbox形式でファイルに追加しますが、 そのとき可能ならflock方式の排他制御(ロック)を使います。
    警告:
    多くのシステムではファイルを読める人はflockも出来ます。 ということはqmail-localのメイル配送を永久に邪魔できるということです。
    誰にでもアクセス可能なファイルにメイルを配ってはいけません。

    ファイルのロックはできたが、書き込みに問題があった場合 (例えば、ディスクが満杯になったなど)、 ファイルは元の長さに切捨てられます。 しかし、このやりかたでも配送中にシステムクラッシュが起きれば、 メイルボックスの破壊は避けられません。

  5. maildir(メイルディレクトリ)」行は '/'または'.'で始まり、'/'で終る行です
    	/home/djb/Maildir/
    
    この行はmaildir形式のディレクトリへの配送を示します。 maildir形式を使えば、メイル受け取りの信頼性が高くなります。


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-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)