web-dev-qa-db-ja.com

PHPでのバウンスメール処理-最新のソリューションはありますか?

PHPを使用してバウンスメール処理を行う必要があります。電子メールを通過することは問題ありませんが、バウンスされた電子メールを解析するために独自のライブラリを作成するためにリソースを投資することは非常に望ましくありません。

バウンスメールを処理するためのものであると私が見つけた3つのPHPソリューションがありますが、私が見ることができるものから、それらはすべて古く、もはや維持されていません。(PHPList 、PHPMailer-BMH、バウンスハンドラー@ PHPClasses.org)

バウンスされた電子メールを処理するための最新のルールセットを知っている人はいますか?必ずしも処理ロジックは必要ありません。最新のルールセットだけで十分です。

助けてくれてありがとう。

23
DrSpock

さまざまなサーバーと応答を処理する必要があるため、バウンス処理は簡単ではありません。これには、電子メール/ホスト/ IPがブラックリストに登録されている/スパムスコアが付けられているために構成が誤ってバウンスするサーバーが含まれます。また、「不在」の自動返信が原因で、大量のバウンスが発生します。

私が知っている簡単な解決策は、受信者アドレスと具体的な送信(トークン)を識別する独自のヘッダーをメッセージに入れることです。バウンスすると、これに基づいてバウンスを確認できます。

別の解決策は、追加情報を送信者アドレスにエンコードし、それに応じてバウンスを解析することです。このためには、電子メールがどのように機能するかを知る必要があります。これは、バウンスが必要な場合に一般的に役立ちます。

SO(ただし、この回答では見つかりませんでした)には、このトピックに関する多くの詳細が記載されたすばらしい回答がいくつかあります。見つかった場合は、追加します。

一般的なポイントは、バウンスを処理するための多くのPHPベースのツールについては知らないということです。PHPList(メーリングリスト処理用のPHPコンポーネント)のリポジトリに何かがあることを知っています。

編集:非常に有益な回答に関連する質問は次のとおりです。

編集:それほど多くはありませんが、いくつかのリンクがあります:

バウンスとバウンスの理由を簡単に特定できる電子メールバウンスの標準がないのはなぜですか?それともありますか? (RFCのように)

RFC3834-電子メールへの自動応答に関する推奨事項 があります RFC5436ふるい通知メカニズム:mailto によって更新されます。

バウンスについては、 RFC5321 Simple Mail Transfer Protocol でも部分的に説明されています。これは、メッセージを配信できない場合にMTAが報告しなければならない理由を明確に示しています。

主な問題は、SMTPでバウンスアドレス(送信者)を確認できないことです。そのため、バウンスメッセージを送信すると、間違った人に送信される可能性があるという問題が発生します(後方散乱スパム)。

したがって、信頼できるメーラーはバウンスをチェックするだけでなく、SMTPを使用して特定のレベルの品質を取得します。以下を参照してください。

配信されないレポート のウィキペディアページ全体は、画像の最初のビューにとって興味深いかもしれません。

27
hakre

これが私が以前にそれをした方法です。バウンスメールの少なくとも70%以上を一貫してキャプチャできます。

送信される電子メールに、カスタムヘッダー(「x-email-check-id」など)を挿入して、送信される電子メールごとに一意の識別子を設定します(GUIDを作成し、保存する場合があります)各電子メールのデータベースにあるもの)

サーバー側で、バウンスアドレスから定期的に電子メールをダウンロードするcronジョブを作成し、応答メッセージでこのヘッダーを探します。そうすれば、バウンスメールを送信された電子メールと照合できます。このようにして、この電子メールが送信から返送され、スパム電子メールではないことを確認できます。

その後、電子メールの内容で特定のキーワードを検索して、バウンスの理由を特定します。新しい電子メールサーバーが異なるテキストを返すため、このキーワードのリストは頻繁に更新する必要があります。しかし、これが私が使用したリストです。

$Email__Full[] = 'databytes limit';
$Email__Full[] = 'exceeded dropfile size';
$Email__Full[] = 'exceeded email quota';
$Email__Full[] = 'exceeded storage';
$Email__Full[] = 'exceeding receiving limits';
$Email__Full[] = 'exceeds the maximum size';
$Email__Full[] = 'folder is full';
$Email__Full[] = 'mail system full';
$Email__Full[] = 'mailbox exceeds allowed size';
$Email__Full[] = 'mailbox full';
$Email__Full[] = 'mailbox has exceeded the limit';
$Email__Full[] = 'mailbox is full';
$Email__Full[] = 'mail box full';
$Email__Full[] = 'out of disk space';
$Email__Full[] = 'out of diskspace';
$Email__Full[] = 'over disk quota';
$Email__Full[] = 'over quota';
$Email__Full[] = 'over the allowed quota';
$Email__Full[] = 'problem with the recipient\'s mailbox';
$Email__Full[] = 'quota exceeded';
$Email__Full[] = 'quota violation';
$Email__Full[] = 'space has been used up';
$Email__Full[] = 'space not enough';
$Email__Full[] = 'status: 5.2.1';
$Email__Full[] = 'status: 5.2.2';
$Email__Full[] = 'status: 5.2.3';
$Email__Full[] = 'status: 5.3.3';

$Email__NotExist[] = '/var/mail/nobody';
$Email__NotExist[] = '550 5.1.1';
$Email__NotExist[] = 'account expired';
$Email__NotExist[] = 'account inactive';
$Email__NotExist[] = 'account suspended';
$Email__NotExist[] = 'address is administratively disabled';
$Email__NotExist[] = 'address is not recognized';
$Email__NotExist[] = 'address is rejected';
$Email__NotExist[] = 'address not recognized';
$Email__NotExist[] = 'address rejected';
$Email__NotExist[] = 'bad destination email address';
$Email__NotExist[] = 'cname lookup failed';
$Email__NotExist[] = 'connection refused';
$Email__NotExist[] = 'couldn\'t find any Host';
$Email__NotExist[] = 'could not be found';
$Email__NotExist[] = 'deactivated mailbox';
$Email__NotExist[] = 'delivery time expired';
$Email__NotExist[] = 'destination server not responding';
$Email__NotExist[] = 'disabled or discontinued';
$Email__NotExist[] = 'does not exist';
$Email__NotExist[] = 'does not like recipient';
$Email__NotExist[] = 'doesn\'t have a yahoo.com account';
$Email__NotExist[] = 'doesn\'t have a yahoo.com.sg account';
$Email__NotExist[] = 'domain is for sale';
$Email__NotExist[] = 'find a mail exchanger';
$Email__NotExist[] = 'find any Host named';
$Email__NotExist[] = 'following address(es) failed';
$Email__NotExist[] = 'Host unknown';
$Email__NotExist[] = 'i couldn\'t find any Host by that name';
$Email__NotExist[] = 'illegal user';
$Email__NotExist[] = 'in the queue too long';
$Email__NotExist[] = 'inactive recipient';
$Email__NotExist[] = 'inactive user';
$Email__NotExist[] = 'incorrectly addressed';
$Email__NotExist[] = 'invalid recipient';
$Email__NotExist[] = 'invalid user';
$Email__NotExist[] = 'isn\'t in my control/locals file';
$Email__NotExist[] = 'mailbox not available';
$Email__NotExist[] = 'mailbox not found';
$Email__NotExist[] = 'mailbox unavailable';
$Email__NotExist[] = 'mail is looping';
$Email__NotExist[] = 'message is looping';
$Email__NotExist[] = 'name is not recognized';
$Email__NotExist[] = 'name not found';
$Email__NotExist[] = 'name not recognized';
$Email__NotExist[] = 'no local mailbox';
$Email__NotExist[] = 'no longer accepts mail';
$Email__NotExist[] = 'no longer an employee';
$Email__NotExist[] = 'no longer on server';
$Email__NotExist[] = 'no longer valid';
$Email__NotExist[] = 'no mailbox';
$Email__NotExist[] = 'no route found to domain';
$Email__NotExist[] = 'no such user';
$Email__NotExist[] = 'none of the mail servers for the destination domain has so far responded';
$Email__NotExist[] = 'no valid Host';
$Email__NotExist[] = 'no valid recipients';
$Email__NotExist[] = 'not a valid mailbox';
$Email__NotExist[] = 'not listed';
$Email__NotExist[] = 'not listed in domino';
$Email__NotExist[] = 'possible mail loop';
$Email__NotExist[] = 'recipient cannot be verified';
$Email__NotExist[] = 'recipient unknown';
$Email__NotExist[] = 'recipients are invalid';
$Email__NotExist[] = 'recipnotfound';
$Email__NotExist[] = 'relaying denied';
$Email__NotExist[] = 'several matches found in domino';
$Email__NotExist[] = 'status: 5.1.1';
$Email__NotExist[] = 'status: 5.1.3';
$Email__NotExist[] = 'status: 5.1.4';
$Email__NotExist[] = 'status: 5.1.6';
$Email__NotExist[] = 'status: 5.1.7';
$Email__NotExist[] = 'this user doesn\'t have a yahoo';
$Email__NotExist[] = 'too many Hops';
$Email__NotExist[] = 'unable to deliver';
$Email__NotExist[] = 'unable to relay';
$Email__NotExist[] = 'unknown address';
$Email__NotExist[] = 'unknown recipient';
$Email__NotExist[] = 'unknown user';
$Email__NotExist[] = 'unrouteable address';
$Email__NotExist[] = 'user doesn\'t have';
$Email__NotExist[] = 'user unknown';
$Email__NotExist[] = 'x-notes; 550 5.1.1';
$Email__NotExist[] = 'x-notes; recipient\'s domino directory';
$Email__NotExist[] = '$B%G%#%l%/%H%j$K$O8+$D$+$j$^$;$s!#'; //* Returned from japanese domino . Somehow means directory is not found.

$Email__Banned[] = '_spam_';
$Email__Banned[] = '550 5.7.1';
$Email__Banned[] = '550 access denied';
$Email__Banned[] = '550 no thanks';
$Email__Banned[] = '550 spam';
$Email__Banned[] = '554 5.7.0';
$Email__Banned[] = '554 5.7.1';
$Email__Banned[] = '554 denied';
$Email__Banned[] = '554 message does not conform to standards';
$Email__Banned[] = '554 message refused';
$Email__Banned[] = '571 message Refused';
$Email__Banned[] = 'activated my anti-spam features';
$Email__Banned[] = 'administrative prohibition';
$Email__Banned[] = 'appears to contain uce/spam';
$Email__Banned[] = 'appears to be spam';
$Email__Banned[] = 'appears to be unsolicited';
$Email__Banned[] = 'banned for spamming';
$Email__Banned[] = 'blackholed by uribl.com';
$Email__Banned[] = 'blacklisted by surbl';
$Email__Banned[] = 'blocked by filter';
$Email__Banned[] = 'blocked by kbas system';
$Email__Banned[] = 'blocked by our content filter';
$Email__Banned[] = 'blocked by spamsssassin';
$Email__Banned[] = 'blocked by the recipient';
$Email__Banned[] = 'blocked by user\'s personal blacklist';
$Email__Banned[] = 'blocked due to spam like qualities';
$Email__Banned[] = 'blocked using spam pattern';
$Email__Banned[] = 'blocked using uceprotect';
$Email__Banned[] = 'body part contains disallowed string';
$Email__Banned[] = 'classified as **spam**';
$Email__Banned[] = 'content blacklist';
$Email__Banned[] = 'content filter rejected the message';
$Email__Banned[] = 'consider the message to be spam';
$Email__Banned[] = 'considered spam';
$Email__Banned[] = 'contains spam';
$Email__Banned[] = 'content filter rejection';
$Email__Banned[] = 'content rejected';
$Email__Banned[] = 'denied by policy';
$Email__Banned[] = 'detected your message as spam';
$Email__Banned[] = 'does not accept UCE';
$Email__Banned[] = 'domain is banned';
$Email__Banned[] = 'email abuse detected';
$Email__Banned[] = 'error 553';
$Email__Banned[] = 'help_spam_16.htm';
$Email__Banned[] = 'high on spam scale';
$Email__Banned[] = 'http://www.google.com/mail/help/bulk_mail.html';
$Email__Banned[] = 'http://www.surbl.org/lists.html';
$Email__Banned[] = 'identified as spam';
$Email__Banned[] = 'identified your message as spam';
$Email__Banned[] = 'listed in multi.surbl.org';
$Email__Banned[] = 'looks like spam';
$Email__Banned[] = 'mail rejected by windows live hotmail for policy reasons';
$Email__Banned[] = 'message bounced by administrator';
$Email__Banned[] = 'message content rejected, ube';
$Email__Banned[] = 'message contains a virus or other harmful content';
$Email__Banned[] = 'message has too high spam probability';
$Email__Banned[] = 'message is blacklisted';
$Email__Banned[] = 'message refused';
$Email__Banned[] = 'no spam here';
$Email__Banned[] = 'not accepted here';
$Email__Banned[] = 'not in the whitelist';
$Email__Banned[] = 'not rfc compliant';
$Email__Banned[] = 'permanently rejected message';
$Email__Banned[] = 'policy violation';
$Email__Banned[] = 'refused mail service';
$Email__Banned[] = 'reject spam mail';
$Email__Banned[] = 'reject the mail';
$Email__Banned[] = 'rejected by filter';
$Email__Banned[] = 'rejected as spam';
$Email__Banned[] = 'rejected by 35 antiSpam system';
$Email__Banned[] = 'rejected by antispam system';
$Email__Banned[] = 'rejected by cloudmark anti-spam';
$Email__Banned[] = 'rejected by our Spam Filter';
$Email__Banned[] = 'rejected by spam filtering';
$Email__Banned[] = 'rejected by surbl';
$Email__Banned[] = 'rejected by the anti-spam system';
$Email__Banned[] = 'rejected due to security policies';
$Email__Banned[] = 'rejected for policy reasons';
$Email__Banned[] = 'rejected for spam';
$Email__Banned[] = 'requires that you verify';
$Email__Banned[] = 'scored as spam';
$Email__Banned[] = 'sender address verification';
$Email__Banned[] = 'sender was rejected';
$Email__Banned[] = 'spam detected by spamassassin';
$Email__Banned[] = 'spam filter pattern';
$Email__Banned[] = 'spam-like characteristics';
$Email__Banned[] = 'spam mail detected';
$Email__Banned[] = 'spam mail refused';
$Email__Banned[] = 'spam message was blocked';
$Email__Banned[] = 'spam rejected';
$Email__Banned[] = 'spam score too high';
$Email__Banned[] = 'status: 5.7.1';
$Email__Banned[] = 'support.proofpoint.com';
$Email__Banned[] = 'suspected spam';
$Email__Banned[] = 'suspicious url in message body';
$Email__Banned[] = 'temporarily deferred';
$Email__Banned[] = 'transaction failed';
$Email__Banned[] = 'unacceptable content';
$Email__Banned[] = 'unacceptable mail content';
$Email__Banned[] = 'unsolicited bulk e-mail';
$Email__Banned[] = 'unsolicited bulk email';
$Email__Banned[] = 'unsolicited email is refused';
$Email__Banned[] = 'validate recipient email';
$Email__Banned[] = 'will be deleted from queue';

$Email__OutOffice[] = 'away for a vacation';
$Email__OutOffice[] = 'away from the office';
$Email__OutOffice[] = 'not in office';
$Email__OutOffice[] = 'on leave';
$Email__OutOffice[] = 'on vacation';
$Email__OutOffice[] = 'out of office';
$Email__OutOffice[] = 'out of the office';
14
iWantSimpleLife

これを自分で書くと思うよりも簡単です。

ヘッダーにバウンスバックパスを設定するだけです。次に、その電子メールアドレスを設定して、処理スクリプトを実行します。明らかに、何らかの形式のユーザーIDを送信する必要があります。

私は以前にPHPListを使用しましたが、問題はありません。必要なことを実行するためのより良いサービスがありますが、明らかにコストがかかります。

バウンスは、アドレスが存在しないか、メールサーバーがアドレスを送り返すときに発生します。一部のメールサーバーは(セキュリティ機能として)応答しないため、精度は最高ではありません。

スタンドアロン/ライブラリの多くは、どのリンクがクリックされたか、誰が電子メールを読んだかを判断する追加機能を提供します。等

これらのことは簡単に達成できますが、リソースが必要です。

他にサポートが必要なものがあれば教えてください

2
encodes

この質問に対する簡単な答えが見つからなかった後、私はgithubでこの優れたソリューションを見つけました:

https://github.com/cfortune/PHP-Bounce-Handler

2
neokio

私はezComponentsライブラリの大ファンです。このライブラリには、メールの送信と解析の両方を処理できるMailコンポーネントが含まれています(MTAに接続してメールを取得することもできます。 http://ezcomponents.org/docs/tutorials/Mail#mail-parsers

ドキュメントを読むと、それはあなたの仕事次第であるように思われます。

1
preinheimer

オンラインコミュニティの15年のベテランである私は、回答者が提携している営利目的の商用ソリューションで質問に回答することは、順調に進んでいることを知っています。だからここに行き、その線を歩きます。具体的に質問に答えるために最善を尽くします。標準の免責事項から始めましょう...

免責事項:私は以下に説明するサービスの原則です。

しかし、バウンスされた電子メールを解析するために独自のライブラリを作成するためにリソースを投資することは非常に望ましくありません。

はい、あなたが書いたり含めたりするライブラリはあなたの修正から数日以内に時代遅れと見なされるかもしれないことを考えると、あなた自身のライブラリを書くことはほとんどの人にとって楽しいことではありません(しかし私たち貧しくてねじれた魂は何もすることはありません)。

バウンスされた電子メールを処理するための最新のルールセットを知っている人はいますか?必ずしも処理ロジックは必要ありません。最新のルールセットだけで十分です。

そのようなライブラリの保守にはかなりの時間がかかり、かなり時間がかかるようになると、そのようなライブラリはしばしば放棄されるか、まばらに更新されます。これは通常、商用ソリューションが生まれる方法です。

私はオープンソースの大ファンであり、長年にわたって個人的に大きな恩恵を受けてきたことは間違いありません。これを読んでいる大多数の人にとって、上記のオプションは完全に十分です。多くの人は、自分で必要なソリューションを開発したり、ニーズに合わせて利用可能なツールを変更したりでき、そうする時間があります。

ただし、独自のアプリケーションを構築し、デバッグとトラブルシューティングを行い、電子メール処理定義を一貫して頻繁に更新したくない場合は、InboxResponse.comがSAASソリューションとして 電子メールバウンス処理 を提供します。それは:

  • 頻繁かつ一貫して更新
  • うまくいくものが欲しいだけの人にぴったり
  • 現在使用している既存のメールシステムに数分で統合できます。
  • 配信追跡、バウンス処理、複数レベルのソフトバウンス処理(一時的に配信不能な電子メール)、無制限のメーリングリスト、統計、グラフなどをサポートします。

無料トライアルは次のURLで入手できます: https://inboxresponse.com/free-trial/

あなたが探していたものとは正確に一致しなかったかもしれませんが(オープンソースライブラリは常に最新の状態に保たれています)、あなたが探しているものが現在利用可能であるとは思いません。

それが誰かを助けることを願っています!

0
siteinteractive