これはこの質問に関連しています:
linux-ニュースレターアプリケーションのバウンスバックレポートを取得する方法?-サーバー障害
バウンスを特定するニュースレターを送信し、ニュースレターから登録解除するときに、次のようなメールアドレスを生成するとします。bounce-123456789@ example.com
これをリターンパスで使用すると思いますよね?
次に、「bounce-」でプレフィックスが付けられたこれらすべてのアドレスを1つのメールボックスに収集するようにpostfixでそれをどのように設定しますか?
最後に、ソフトバウンスとハードバウンスの違いについての話を聞いたことがあります。誰かがその違いを説明し、メールニュースレターから誰かを永久に削除する時期を知るためにそれらをどのようにカウントする必要がありますか?
質問に対する正確な回答([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アドレスを受け入れ、それを解析して、バウンスを記録するために必要なデータベースの更新を行います。
実際、多くの異なるドメインをサポートしたい場合、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_maps
とmaster.cf
を変更しなくても機能します。
以下のコメントから:
fyi-re:ダブルバウンス...
リターンアドレス([email protected]
などのVERPアドレス)を変更する場合は、main.cf
のbounce_notice_recipient
の行をコメント化する必要があります。スクリプトでのみ+id
バウンスを解析することに興味があります。
最近のほとんどのメーリングリストソフトウェアは、MTAがそれらをメーリングリストソフトウェアに戻すように適切に構成されている場合、VERPメッセージを処理する方法をすでに知っています。 GNU Mailman の場合は、 [〜#〜] faq [〜#〜] と適切に名付けられたページをチェックアウトする必要があります。 recipient_delimiter)? "。
これを処理する独自のカスタムニュースレターソフトウェアを作成している場合は、タスクを既に簡単に処理できる既存のアプリケーションを使用するのではなく、なぜホイールを再発明するのかを自問する必要があります。