Postfix バージョン 1.1 以降では要求に応じた可変エンベロープリターン パス (variable envelope return path) アドレスをサポートしています。VERP 形式の配送が要求されると、メッセージの受信者は、それぞれ自分のアドレスが エンベロープ送信者アドレスに組み込まれるようにカスタマイズされた、 メッセージのコピーを受け取ります。
例えば、VERP 形式の配送が要求されると、Postfix は "owner-listname@origin" から受信者 "user@domain" 宛の メールを、送信者アドレスに受信者を次のようにエンコードして配送します:
owner-listname+user=domain@origin
こうすることで、リストのオーナーがバウンスメッセージを分析しなくても、 配送できなかった受信者アドレスを明らかにできます。
VERP の概念は qmail MTA と ezmlm メーリングリストマネージャにより 一般化されました。この概念の背後にある考え方は http://cr.yp.to/proto/verp.txt を参照してください。
このドキュメントがカバーする話題:
VERP 形式の配送を要求されたが、明示的に区切り文字が指定 されなかったときに Postfix が使う VERP の区切り文字。
sendmail コマンドラインや SMTP コマンドで VERP の区切り文字と して Postfix が受け付ける文字。多くの文字はEメールアドレスで (@ や % のように) すでに特別な意味を持っていたり、(英数字のように) ユーザ名や ドメイン名の一部として使われていたり、非 ASCII 文字か制御文字である ため、こういった文字は VERP 区切り文字として使ってはいけません。 脆弱なソフトウェアのバグを突く文字があるかどうかわかりませんが、 そういったことは起こさないようにしたいと思います。
VERP 形式の配送を要求できる SMTP クライアント。Postfix QMQP サーバは独自のアクセス制御メカニズムを使い、また (/usr/sbin/sendmail を使う) ローカルの投稿者は常に許可されます。ホストを許可するには、 その名前や IP アドレス、サブネット (net/mask)、親 .domain を リストアップします。
Postfix バージョン 1.1 および 2.0 では、このパラメータは authorized_verp_clients (デフォルト: $mynetworks)。
Postfix が複数の受信者を持つ VERP メールに対して一つの バウンスレポートを送るか、受信者毎に一つのバウンスレポートを送るかの 選択です。デフォルトの受信者毎というのは、ezmlm が必要とします。
majordomo などのメーリングリストで VERP を便利に使うには、次の2つのうち どちらかに従ってメールを投函するように、リストマネージャを設定すると よいでしょう:
% sendmail -V -f owner-listname other-arguments... % sendmail -V+= -f owner-listname other-arguments...
最初の形式はデフォルトの main.cf VERP 区切り文字を使います。2番目の 形式では明示的に VERP 区切り文字を指定することができます。例では推奨値が 示されています。
このテキストでは、配送できないメールが実在の人に向けられるような、 owner-listname エイリアスが設定されていることを想定しています:
/etc/aliases: owner-listname: yourname+listname
バウンスを処理するために、拡張アドレスを広く活用しましょう。
+ がアドレスと、オプションの拡張アドレスとのセパレータであることと、 拡張アドレスが .forward ファイル名に現れること、拡張アドレスはエイリアス 展開を受けると消えてしまうことを Postfix に伝える必要があります:
/etc/postfix/main.cf: recipient_delimiter = + forward_path = $home/.forward${recipient_delimiter}${extension}, $home/.forward propagate_unmatched_extensions = canonical, virtual
(後ろ2つのパラメータ設定はデフォルトの設定です)。
owner-listname アドレスに送られたメールを全て処理するようなコマンドを 持つ、.forward+listname という名前のファイルを設定する必要があります:
~/.forward+listname: "|/some/where/command ..."
このように設定すると、user@domain 宛の配送できないメールは次のアドレスに 返されます:
owner-listname+user=domain@your.domain
これは .forward+listname ファイルに書かれたコマンドによって処理されます。 他のものに混じって、メッセージはカプセル化された受信者アドレスを持つ To: ヘッダを含むはずです:
To: owner-listname+user=domain@your.domain
読者には、To: ヘッダ行をパースして user=domain 部分を受信者アドレスから 抜き出すという課題が残されています。
Postfix SMTP サーバは VERP 形式の配送をできるようにする、XVERP コマンドを実装しています。2つの形式の文法が許されます:
MAIL FROM:<sender@domain> XVERP MAIL FROM:<sender@domain> XVERP=+=
最初の形式は main.cf VERP 区切り文字のデフォルトを使い、2番目の形式は それを明示的に上書きします。示された値は推奨値です。
Postfix sendmail コマンドには、VERP 形式の配送を要求するための -V フラグがあります。次の2つの形式のうちどちらかを指定します:
% sendmail -V -f owner-listname .... % sendmail -V+= -f owner-listname ....
最初の形式は main.cf VERP 区切り文字のデフォルトを使い、2番目の形式は それを明示的に上書きします。示された値は推奨値です。
Postfix QMQP サーバが
listname-@your.domain-@[]
のような形式のエンベロープ送信者アドレスを持つメールを受信すると、 qmail/ezmlm は VERP デリミタを "-=" であると想定しているため、それを 使って、Postfix は送信者アドレス "listname-user=domain@your.domain" を生成します。
より一般的にいうと、 "prefix@origin-@[]" という送信者 アドレスによって "prefixuser=domain@origin" という送信者アドレスを 持つ VERP 形式の配送を要求します。しかし、Postfix では verp_delimiter_filter パラメータで指定された VERP デリミタしか使えません。特に、"=" デリミタは qmail との互換性のために必須です (詳細は qmail addresses(5) マニュアル ページを参照してください)。