web-dev-qa-db-ja.com

Postfixでバウンスを収集する方法

これはこの質問に関連しています:

linux-ニュースレターアプリケーションのバウンスバックレポートを取得する方法?-サーバー障害

バウンスを特定するニュースレターを送信し、ニュースレターから登録解除するときに、次のようなメールアドレスを生成するとします。bounce-123456789@ example.com

これをリターンパスで使用すると思いますよね?

次に、「bounce-」でプレフィックスが付けられたこれらすべてのアドレスを1つのメールボックスに収集するようにpostfixでそれをどのように設定しますか?

最後に、ソフトバウンスとハードバウンスの違いについての話を聞いたことがあります。誰かがその違いを説明し、メールニュースレターから誰かを永久に削除する時期を知るためにそれらをどのようにカウントする必要がありますか?

15
Brian Armstrong

質問に対する正確な回答([email protected]アドレスの処理)は、サーバーがメールを受信するように構成されている方法によって異なります。 example.comが仮想ドメインの場合、[email protected]メールボックスにメッセージを収集することが最善の方法です(recipient_delimiter = -を想定)。

example.comがサーバーのローカル配信ドメインである場合(メールは実際のシステムアカウントに配信されます)、bounceユーザーのホームディレクトリに.forwardファイルを追加できます。バウンス情報を解析してデータベースまたはファイルに記録するプログラムに。 man local形式の詳細とプログラムへの配信方法については、.forwardをご覧ください。

多数のドメインにメッセージを送信するため、VERPドメインとしてbounces.example.comを使用しています。このドメインをrelay_domainsに追加する必要があります。次の内容で/etc/postfix/transport_mapsを作成します。

bounces.example.com             bulkbounce:

次に、次のような行を/etc/postfix/master.cfに追加します。

 bulkbounce unix-n n--pipe 
 user = nobody argv =/usr/local/bin/bounce_handler.py $ {recipient} 

bounce_handler.pyスクリプトは、コマンドラインオプションとしてVERPアドレスを受け入れ、それを解析して、バウンスを記録するために必要なデータベースの更新を行います。

17
Insyte

実際、多くの異なるドメインをサポートしたい場合、Instyleの答えを実装するのは非常に難しく、次の理由で間違っています。

a)transport_mapsの例では、そのドメインに送信されたすべてのメールは、そのメールがバウンスされたメールであるかどうかに関係なく、その特定のサービスに送信されます。特定のドメイン名を使用しているため、実際にはバウンスされた電子メールのみである必要があります...しかし、そのように保証することはできません。

b)スクリプトに送信されるデータはメール自体であり、バウンスメッセージではありません。つまり、コードにはメールがバウンスされた理由がわからない場合があります(つまり、ローカルバウンスは元のメールのみを送信します)。


Postfixでその設定を行う正しい方法は、バウンス通知クラスを使用することです。

1)/ etc/postfix/main.cf

notify_classes = bounce
bounce_notice_recipient = [email protected]
transport_maps = hash:/etc/postfix/transport_maps

2)/ etc/postfix/transport_maps

# when you make changes to this file, run:
#   Sudo postmap /etc/postfix/transport_maps
[email protected] bulkbounce:

ご覧のとおり、メールが返送されるたびに[email protected]を使用するようにpostfixに指示します。次に、トランスポートマップで、bulkbounceをサービスとして使用して、[email protected]への電子メールアドレスを処理します。

最後に、スクリプトでbulkbounceを定義できます。

3)/ etc/postfix/master.cf

bulkbounce unix -       n       n       -       -       pipe
  flags=FRq user=bounce argv=/home/bounce/bin/snapbounce --sender ${sender} --recipient ${recipient}

このスクリプトでは、ユーザーが必要です。 nobodyも良い選択です。特定のユーザーが必要な場合は、次のコマンドで作成できます。

useradd bounce

master.cfにスクリプトがない場合、メールはバルクバウンスアカウントに送信されます。そのため、ファイルからメールを解析するスクリプトがある場合、transport_mapsmaster.cfを変更しなくても機能します。


以下のコメントから:

fyi-re:ダブルバウンス...
リターンアドレス([email protected]などのVERPアドレス)を変更する場合は、main.cfbounce_notice_recipientの行をコメント化する必要があります。スクリプトでのみ+idバウンスを解析することに興味があります。

11
Alexis Wilke

最近のほとんどのメーリングリストソフトウェアは、MTAがそれらをメーリングリストソフトウェアに戻すように適切に構成されている場合、VERPメッセージを処理する方法をすでに知っています。 GNU Mailman の場合は、 [〜#〜] faq [〜#〜] と適切に名付けられたページをチェックアウトする必要があります。 recipient_delimiter)? "。

これを処理する独自のカスタムニュースレターソフトウェアを作成している場合は、タスクを既に簡単に処理できる既存のアプリケーションを使用するのではなく、なぜホイールを再発明するのかを自問する必要があります。

1
Jeremy Bouse