29

これが私のシナリオです:

admin@domain.comとbounce@domain.comの2つのメールアカウントを持っています。

admin@domain.comを使用してすべてのユーザーに電子メールを送信したいのですが、bounce @ domain.comに「返信」します(ここまでは、PHPスクリプトで処理できます)。

電子メールを送信できない場合、bounce @ domain.comに送信され、エラーメッセージは553(存在しない電子メール...)などである可能性があります。

私の質問は次のとおりです。バウンスエラーコードをチェックするための処理スクリプトを介して、これらすべてのバウンス電子メール(電子メールを送信できませんでした)をbounce@domain.comに送信するにはどうすればよいですか?

「処理スクリプト」にはどのプログラミング言語を使用する必要がありますか?

「処理スクリプト」はどのようになりますか?サンプルを頂けますか?

言い換えると:

バウンスメールを処理するために従う必要のある手順は何ですか?

4

14 に答える 14

29

最良のシナリオは、バウンスのタイプを分類できることです:ソフト、ハード...

私たちが使用しているのはBounceStudioです。あなたはそれをコンパイルしてphpライブラリを追加する必要があります...まったく難しいことではありません。あなたはその製品の無料版と有料版を持っています

バウンスの種類を検出したら、PEAR :: MAIL :: MIMEを使用して、以前に電子メールに追加したカスタムヘッダーを検索します。

X-user-id: XXXXX
X-campaign-id: YYYYYY 
X-recipient-id: SSSSSSSSS

このようにして、電子メールを送信した実際の受信者を知ることができます。

これがお役に立てば幸いです。だからあなたは私が500ポイントに到達するのを手伝うことができます:P

于 2009-06-18T14:36:23.613 に答える
7

ounce@domain.com を作成し、php を使用してそれらのメールを読んで、やりたいことをしてみませんか?

編集 コメントの後 : 私のリンクをチェックしてください。php スクリプトがあり、php を使用してボックスを開いて電子メールを送信し、電子メールを読む方法を教えてくれます。このスクリプトを使用して、エラー メッセージを確認できます。

于 2009-06-18T09:39:41.823 に答える
5

メールが実際のメール アドレス (ログインの詳細など) にバウンスするようにします。

x 分ごとに実行される php スクリプトを作成します (たとえば、cron ジョブを使用)。この php スクリプトは、次のことを行う必要があります。- ボックスからすべての電子メールを取得します (たとえばZend Mailを使用) - メッセージ内のエラーを確認します (たとえば、正規表現で検索します) - 必要なことを行います。

誰がバウンスしたかを具体的に知りたい場合は、ユーザー固有のバウンス アドレスを使用できます。(たとえば、このサイトを参照してください)

于 2009-06-18T10:58:40.013 に答える
4

答えが出るのが少し遅いかもしれませんが、いつでも何か新しいことを試すことができます。私は先週、このようなタスクを行い、バウンスを連想配列に切り刻む Chris Fortune による BOUNCE HANDLER クラスを使用しました - http://www.phpclasses.org/browse/file/11665.html

これは、メーラーを使用して POP3 に接続してバウンスを取得した後に使用され、これを使用して断片に解析し、検索したステータスがある場合は必要なアクションを実行します。

乾杯。

于 2010-11-16T11:10:09.203 に答える
2

用に POP3 メールボックスをセットアップしている場合bounce@domain.comは、PHP で作成された POP3 クライアント スクリプトを使用して、メッセージを取得し、配信不能メッセージをチェックすることができます。

于 2009-06-18T09:41:19.247 に答える
0

これは、IMAPを使用してバウンスを処理するための定型ソリューションです。

MailインスタンスのReturn-Pathヘッダーを専用のbounce@xxxxxx.usに変更しました

私が実行可能であると考えるのに十分簡単な唯一の方法は、POP3を介して専用の受信トレイをチェックし、受信したメッセージに基づいて各電子メールを処理できる次の方法です。

$inst=pop3_login('mail.xxxxxx.us','110','bounce@xxxxxx.us','pass');
$stat=pop3_stat($inst);
//print_r($stat);
if($stat['Unread']>0){
    echo "begin process<br><br>";
    $list=pop3_list($inst);
    //print_r($list);
    foreach($list as $row){
        if(strpos($row['from'],'MAILER-DAEMON')!==FALSE){
            $msg=imap_fetchbody($inst,$row['msgno'],'1');
            if(strpos($msg,'550')!==FALSE){
                echo "handle hard bounce".$msg."<br><br>";
                //WHATEVER HERE TO PROCESS BOUNCE
            }   
        }
        else{
            $msg=imap_fetchbody($inst,$row['msgno'],'1');
            echo "not from my server. could be spam, etc.".$msg."<br><br>";
            //PROBABLY NO ACTION IS NEEDED
        }   
        //AFTER PROCESSING
        //imap_delete ( resource $imap_stream , int $msg_number [, int $options = 0 ] )
        //commented out because I havent implemented yet. see IMAP documentation
    }   
}   
else{
    echo "no unread messages";  
}


//imap_close ( resource $imap_stream [, int $flag = 0 ] )
//commented out because I havent implemented yet. see IMAP documentation.
//flag: If set to CL_EXPUNGE, the function will silently expunge the mailbox before closing, removing all messages marked for deletion. You can achieve the same thing by using imap_expunge()




function pop3_login($host,$port,$user,$pass,$folder="INBOX",$ssl=false) 
{ 
    $ssl=($ssl==false)?"/novalidate-cert":""; 
    return (imap_open("{"."$host:$port/pop3$ssl"."}$folder",$user,$pass)); 
} 
function pop3_stat($connection)        
{ 
    $check = imap_mailboxmsginfo($connection); 
    return ((array)$check); 
} 
function pop3_list($connection,$message="") 
{ 
    if ($message) 
    { 
        $range=$message; 
    } else { 
        $MC = imap_check($connection); 
        $range = "1:".$MC->Nmsgs; 
    } 
    $response = imap_fetch_overview($connection,$range); 
    foreach ($response as $msg) $result[$msg->msgno]=(array)$msg; 
        return $result; 
} 
function pop3_retr($connection,$message) 
{ 
    return(imap_fetchheader($connection,$message,FT_PREFETCHTEXT)); 
} 
function pop3_dele($connection,$message) 
{ 
    return(imap_delete($connection,$message)); 
} 
于 2012-10-31T06:41:50.670 に答える
0

いつでもhttp://cloudmailin.comのようなものを使用して、バウンスされた電子メールをhttp経由でphpサーバーに転送できますが、電子メールの送信とそのapiを使用したバウンスの詳細の取得専用のサービスを使用した方がよい場合があります。

于 2011-03-23T11:36:20.950 に答える
0

私は同じ問題、正確な状況を抱えていました。デフォルトでは、私のメールサーバーは、返信されたすべてのメールを最初に送信されたのと同じアカウントに送信し、自動メッセージ「メール配信に失敗しました: 送信者にメッセージを返します」 .

返品された理由を本当に知りたくありません。非常に多くのメールトランザクションがあったため、悪いものを削除したいだけです. Doestn Exist、Unavailable などの特定のルールを確認する時間がありません ,,, 削除のフラグを立てて続行したいだけです。

多くの異なるサーバーと応答タイプを処理する必要があるため、メールのバウンスは非常に簡単です。スパム対策ソフトウェアまたはオペレーティング システムのシナリオごとに、バウンスされた電子メールと共に異なるエラー コードが送信される場合があります。

IMAP をセットアップする場合は、こちらの KIDMOSES の「 Handling Bounced Email - USING PHPMAILER-BMH AND AUTHSMTP」のこの修正済みデバッグ バージョンを読んでダウンロードすることをお勧めしますhttp://www.kidmoses.com/blog-article.php?bid=40独自のカスタム ヘッダーを送信し、bounce@domain.comに送信してから、指を交差させて、バウンス メールに書かれた送信済みヘッダーをスクリプトがキャッチするかどうかを確認します。試してみました、動作します。

しかし、私の問題を解決した私の迅速で簡単な修正に従いたい場合は、ここに秘密があります.

1 - KIDMOSES が別の場所に移動したい場合に備えて、KIDMOSES サイトまたは私のサイトからより良いバージョンをダウンロードしてください http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.zip

2 - 返されたメールのテキストを含む変数は $body であり、それ自体に不正な返信メールが含まれています (SO ITS AN MULTIDIMENSIONAL ARRAY )。(サーバーのメールやその他の DNS メールも含まれますが、BAD MAIL BOUNCED を探しています。

3 - あなたの OWN SERVICE はバウンスされた電子メールを送り返しているため、バウンスされた電子メールを送り返し、その形式と独自のヘッダーを変更する可能性は低いため、返されたバウンスされた電子メール配列の順序を安全に選択できます。私の場合、常に同じ形式のテンプレートでした。(システムやプロバイダーを変更しない限り)

4 - $bodyを調べて、すべての電子メール文字列変数を検索し、それらを抽出して、$matchesという 2 次元配列に配置します。

5 - print_r( array_values( $matches ));を使用して配列を出力することにより、配列の位置を選択します。

6 - これは、変更する必要があるコードです。class.phpmailer-bmh.phpファイルの500 行目あたり

  // process bounces by rules
  $result = bmhDSNRules($dsn_msg,$dsn_report,$this->debug_dsn_rule);
} elseif ($type == 'BODY') {
  $structure = imap_fetchstructure($this->_mailbox_link,$pos);
  switch ($structure->type) {
    case 0: // Content-type = text
      $body = imap_fetchbody($this->_mailbox_link,$pos,"1");
      $result = bmhBodyRules($body,$structure,$this->debug_body_rule);

      //MY RULE IT WORKS at least on my return mail system..
      $pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i';
      preg_match_all($pattern, $body, $matches);
        //print_r( array_values( $matches ));     //To select array number of bad returned mail desired, usually is 1st array $matches[0][0]          
        echo "<font color = red>".$matches[0][0]."</font><br>";
      break;

そのため、返されたヘッダーのことは忘れて、悪いメールに集中します。優れたものを作成したり、MySQL を作成したり、やりたいことを処理したりできます。

重要 サンプル ディレクトリの callback_echo.php にあるエコーにコメントを付けないと、出力される前にすべてのジャンクが取得されます。

function callbackAction ($msgnum, $bounce_type, $email, $subject,      $xheader, $cheader, $remove, $rule_no=false, $rule_cat=false, $rule_msg='', $totalFetched=0) {
  $displayData = prepData($email, $bounce_type, $remove);
  $bounce_type = $displayData['bounce_type'];
  $emailName   = $displayData['emailName'];
  $emailAddy   = $displayData['emailAddy'];
  $remove      = $displayData['remove'];
  //echo "<br>".$msgnum . ': '  . $rule_no . ' | '  . $rule_cat . ' | '  . $bounce_type . ' | '  . $remove . ' | ' . $email . ' | '  . $subject . ' | ';
  //echo 'Custom Header: '  . $cheader . " | ";
  //echo 'Bounce Message: '  . $rule_msg . " | ";
  return true;
}

私の出力

Connected to: mail.chasqui.market (bounce@chasqui.market)
Total: 271 messages 
Running in disable_delete mode, not deleting messages from mailbox

kty2001us@starmedia.com

...

entv@nuevoface.com

Closing mailbox, and purging messages
Read: 271 messages
0 action taken
271 no action taken
0 messages deleted
0 messages moved
于 2015-11-24T17:25:53.180 に答える
0

Procmail を使用して、この種のメールをフィルタリングしています。ここで既に説明した解決策のいくつかを検討した結果、バウンス メッセージを検出するための簡単な Procmail レシピにたどり着きました。必要な精度に応じて、これは状況に適用できる場合があります。

詳細については、このブログ エントリを確認してください。

于 2013-12-16T11:19:47.110 に答える
0

PHPメールコマンドでhttp://php.net/mail

5 番目のパラメーターを使用し、それに「-f」を追加します。

したがって、「-f mybouncebox@mydomain.com」をパラメータとして使用します

phpList ニュースレター マネージャーは、これを使用してバウンスを管理します。

バウンスがメールボックスでいっぱいになると、それらを POP して処理できます。彼らが到着したときに処理するのではなく、それが彼らに対処する最も簡単な方法です.

于 2012-02-08T04:10:22.970 に答える
0

同じ質問に対する答えを探していました。質問にはより多くの部分があり、より多くのオプションがあります。

バウンスされた電子メールを処理するために、PHP を使用したサイトを使用している場合、コンパイルや追加のソフトウェアのインストールが不要な、純粋に PHPのPHP クラスを見つけました。使い方はとても簡単です。

cPanel、または InterWorx/SiteWorx を使用している場合は、PHP スクリプトなどのスクリプトを使用して、受信した電子メールを処理するようにアドレスの一部を構成できるため、前述のクラスを使用して独自の処理を記述できます。もちろん、通常の電子メール アカウントを作成し、POP3 または IMAP 経由でメールを取得して解釈することもできます。IMAP のような追加のチャネルを使用する必要がないので、最初の方が優れていると思います。もちろん、メール サーバーを設定できない場合や、設定方法がわからない場合は、前者の方が適しています。

幸運を!:)

于 2011-11-16T16:02:25.097 に答える
0

このための PHP ソリューションを探していたのはかなり運が悪かったのですが、必要なことだけを行うこの製品に出くわしました。

ネイティブ アプリの mac/win として動作しますが、機能します。

http://www.maxprog.com/site/software/internet-marketing/email-bounce-handler_sheet_us.php

于 2011-08-29T00:33:48.147 に答える
-1

SwiftMailer を参照してください。それは完全に PHP で書かれており、「バウンス」メールをサポートしています。 http://swiftmailer.org/

于 2010-06-04T12:59:39.987 に答える