サーバーに返送されたバウンスされた(配信不能)メールのヘッダーを解析し、ソフトバウンスかハードバウンスかを判別する最良の方法は何ですか?
私はユーザーにオプトインメールのみを送信していますが、一部のメールアドレスが古くなっていることがあります。メールがサーバーにバウンスするとき、なぜバウンスしたか(ソフト/ハード)を確認します。次に、データベースで適切に処理したり、次回ログイン時にメールを更新するようにユーザーにフラグを付けたりできます。
UbuntuとPostfixを使用しています。エイリアスと仮想エイリアスを使用してVERPを正常に実装しました。したがって、バウンスされた電子メールには[email protected]のリターンパスがあり、それらをスクリプトにパイプすることができます。
これでVERPセットアップが完了したので、元のメールの送信先はわかりましたが、返されたメールヘッダーを解析して、ソフトバウンスかハードバウンスかを調べる必要があります。
これを処理する最良の方法は何ですか?私の理解では、すべてのメールサーバーが同じルールで機能するわけではなく、ヘッダーにはさまざまな形式があります。これらの種類のものを追跡するオープンソースプロジェクトはありますか?バウンスの大部分を適切に分類する簡単な実装はありますか?
私はメールサーバーの評判を保護するつもりですので、どんな助けでも大歓迎です!
RFC346 で説明されているように、5で始まるステータスコードは永続的な障害に使用され、4は永続的な一時的な障害に使用されます。異なる形式のいくつかのメッセージを解析する代わりに、サーバーログに依存して次のようなことを試すことができます。
grep " dsn=5." /var/log/mail.log | grep -o -P " to=<(.+?)>" | sort | uniq -c
これにより、mail.log(Postfix形式)から永続的なエラーが見つかり、すべてのアドレスのアドレスとバウンスの量が示されます。 「dsn = 4」を使用することもできます。一時的なエラーのあるアドレスを取得します。
通常、バウンスには2つのタイプがあります
最初のケースは、すでに上記のEsa Jokinenによって excellent answer でカバーされています。あなたの最善の策は、メールログを解析することです。
2番目のケースは、バウンスの特殊なケースです。シナリオ例:
ここでは、2番目のタイプの例がメールをバウンスします。転送ルールYahooメールサーバー[email protected]> [email protected]があります。残念ながらexample.netのメールサーバーはメッセージを拒否します:(
From MAILER-DAEMON Thu Mar 5 05:07:26 2015
Return-Path: <>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: from nm21-vm7.bullet.mail.gq1.yahoo.com (nm21-vm7.bullet.mail.gq1.yahoo.com [98.136.217.54])
(using TLSv1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits))
(No client certificate requested)
by mx.example.org (Postfix) with ESMTPS id D6365565FC
for <[email protected]>; Thu, 5 Mar 2015 05:07:25 +0700 (WIT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=bounce; t=1425506842; bh=zk/tWZNl6c36dmlPDmakM9ekK8cHVJANXMmSdsbkcWc=; h=From:To:Date:Subject:From:Subject; b=Im95h1qTg6qN3yUI7vF1fXtJ0SbUnzv8rUPwLbpNwxGPN2p8wfosXJzQgJ3nzr4L4ZQ50P2d9E9U4jEUNtnyi7nlFd5kKbtiVuda4H56h1PFnt+7wSpgHcd5Irs/lLODumb6ZZSEpCOWttcB9+JLaDfEUUPjGcbR+xww4XeH5Eo=
From: [email protected]
To: [email protected]
Date: Wed, 04 Mar 2015 22:07:22 -0000
Subject: Failure Notice
X-Yahoo-Newman-Property: bmbounce
Sorry, we were unable to deliver your message to the following address.
<[email protected]>:
Remote Host said:
550 5.1.1 User unknown
[RCPT_TO]
この場合、唯一の方法はバウンスメッセージを解析することです。残念ながら、標準のバウンス形式はないため、本文を解析して、拒否の原因を特定する必要があります。
Postfixバウンス解析の機能チェックリスト:
2番目の機能では、いくつかの一般的な拒否メッセージをグーグルできます。例は次のとおりです bounce-regex-list.xml by Jakub Liska 。
Esa Jokinenは、これら2つのバウンスタイプについて 以下のコメントの良い点 を作成しました。サーバーの評判を維持することが目的の場合は、最初のバウンスタイプを処理するだけで十分です。 2番目のバウンスは、リストのクリーンアップに関するものでした。したがって、死んだ電子メールを消去して、サーバーのsomeリソースを解放する必要があります。
PHPlistやMailmanなどの一部のメーリングリストマネージャーも、メールログを解析するためのリソースがないため、メール本文の解析に関するこのバウンス問題に対処します。