wake-up-neo.com

Bounce Email-Abwicklung mit PHP?

Hier ist mein Szenario:

Ich habe 2 E-Mail-Konten: [email protected] und [email protected]

Ich möchte an alle meine Benutzer eine E-Mail mit [email protected] senden, dann aber auf "[email protected]" antworten (bis hier, mein Skript PHP kann damit umgehen).

Wenn die E-Mail nicht gesendet werden kann, wird sie an [email protected] gesendet. Die Fehlermeldung könnte 553 sein (nicht vorhandene E-Mail ...) usw.

Meine Frage ist: Wie leite ich alle diese Absprung-E-Mails (nicht gesendete E-Mails) über ein Bearbeitungsskript an [email protected], um die Absprungsfehlercodes zu überprüfen?

Welche Programmiersprache sollte ich für das "Handling Script" verwenden?

Wie würde das "Handhabungsskript" aussehen? Kannst du eine Probe geben?

mit anderen Worten:

Wie gehe ich vor, um die Bounce-E-Mail zu bearbeiten?

29
mcfadder_09

Das beste Szenario ist, die Art des Abpralls zu klassifizieren: weich, hart ...

was wir verwenden, ist BounceStudio . Sie müssen es kompilieren und die PHP-Bibliotheken hinzufügen ... überhaupt nicht schwer. Sie haben die kostenlose und kostenpflichtige Version dieses Produkts

sobald wir die Art bounce gefunden haben, verwenden wir PEAR :: MAIL :: MIME, um nach benutzerdefinierten Headern zu suchen, die wir zuvor der E-Mail hinzugefügt haben.

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

auf diese Weise können wir den tatsächlichen Empfänger kennen, an den wir die E-Mail gesendet haben.

hoffe das hilft dir! Sie können mir helfen, die 500 Punkte zu erreichen: P

29
Gabriel Sosa

Warum nicht ein [email protected] erstellen und php verwenden, um diese E-Mails zu lesen und was immer du willst?

Bearbeiten Nach Ihrem Kommentar: Bitte überprüfen Sie, ob mein Link ein PHP-Skript enthält, in dem Sie lernen, wie Sie das Feld mit PHP öffnen und die E-Mails lesen. Mit diesem Scrip können Sie die Fehlernachrichten überprüfen.

7
Shoban

Lassen Sie die E-Mails an eine Adresse senden, bei der es sich tatsächlich um eine E-Mail-Adresse handelt (mit Anmeldedaten usw.).

Erstellen Sie ein PHP-Skript, das alle x Minuten ausgeführt wird (zum Beispiel mit einem Cron-Job). Dieses PHP-Skript muss die folgenden Schritte ausführen- Alle E-Mails aus der Box abrufen (verwenden Sie beispielsweise Zend Mail )- Tu was immer nötig ist.

Wenn Sie genau wissen möchten, wer zurückgeworfen wurde, können Sie benutzerspezifische Absprungadressen verwenden. (Siehe zum Beispiel diese Seite )

5
Peter Smit

Vielleicht ist es für die Antwort etwas spät, aber Sie können immer etwas Neues ausprobieren ... Ich hatte in der letzten Woche eine solche Aufgabe und benutzte die BOUNCE HANDLER-Klasse von Chris Fortune, die den Sprung in assoziative Arrays zerhackt - http://www.phpclasses.org/browse/file/11665.html

Diese Option wird verwendet, nachdem Sie mit einem Mailer eine Verbindung zum POP3 hergestellt haben, um die Abpraller davon zu erhalten, sie dann in Teile zu parsen und, wenn der Status, nach dem Sie gesucht haben, die erforderlichen Aktionen ausführt.

Prost.

4
balazscsaba2006

Wenn Sie ein POP3-Postfach für [email protected] eingerichtet haben, können Sie ein in PHP geschriebenes POP3-Clientskript verwenden, um die Nachrichten abzurufen und nach nicht zustellbaren Nachrichten zu suchen.

2
Kev

Ich hatte das gleiche Problem, genaue Situation. Standardmäßig sendet mein E-Mail-Server alle meine zurückgegebenen E-Mails an dasselbe Konto, von dem er ursprünglich gesendet wurde, mit der automatischen Nachricht "E-Mail-Zustellung fehlgeschlagen: Rückgabe der Nachricht an den Absender"

Ich möchte nicht wirklich wissen, warum es zurückgegeben wurde, hatte so viele E-Mail-Transaktionen, dass ich nur die schlechten entfernen möchte. Sie haben keine Zeit, bestimmte Regeln wie Doestn Exist, Unavailable usw. zu überprüfen. Sie möchten nur zum Löschen vormerken und fortfahren.

Bounce-Mails sind so trivial, wie Sie mit vielen verschiedenen Servern und Antworttypen umgehen müssen. Jede Anti-Spam-Software oder jedes Betriebssystemszenario kann mit der zurückgeschickten E-Mail einen anderen Fehlercode senden.

Ich empfehle Ihnen, diese korrigierte, debugierte Version von Handling Bounce Email - VERWENDEN von PHPMAILER-BMH UND AUTHSMTP von KIDMOSES here http://www.kidmoses.com/blog-article.php?bid=) zu lesen und herunterzuladen 40 Wenn Sie IMAP einrichten und Ihre eigenen benutzerdefinierten Header senden möchten, senden Sie diese an Ihre [email protected] und drücken Sie dann die Daumen, um zu sehen, ob das Skript die von Ihnen gesendeten Header abfängt mail. Ich habe es versucht, funktioniert.

Aber wenn Sie meiner schnellen und einfachen Lösung folgen möchten, die mein Problem gelöst hat, ist hier das Geheimnis.

1 - Laden Sie die bessere Version von der KIDMOSES-Website oder von meiner Website herunter, nur für den Fall, dass sich KIDMOSES an einen anderen Ort bewegen möchte http://chasqui.market/downloads/KIDMOSES-phpmailer-bmh.Zip

2 - Die Variable, die den Text Ihrer zurückgegebenen E-Mail enthält, ist $ body und enthält selbst die fehlerhafte zurückgegebene E-Mail (SO ITS AN MULTIDIMENSIONAL ARRAY). (Enthält auch Server und andere DNS-Mails, aber wir suchen nach dem BAD MAIL BOUNCED.

3 - Da Ihr EIGENER SERVICE Ihnen die zurückgeschickte E-Mail zurücksendet, ändern Sie wahrscheinlich nicht das Format und die eigenen Kopfzeilen und senden zurückgeschickte E-Mails zurück, sodass Sie die Reihenfolge der zurückgesandten E-Mail-Arrays sicher auswählen können. In meinem Fall war immer das gleiche Formatvorlage. (Sofern Sie nicht das System oder den Anbieter wechseln)

4 - Wir untersuchen den $ body, suchen nach allen E-Mail-Stringvariablen und extrahieren sie in einem zweidimensionalen Array mit dem Namen $ Matches

5 - Wir wählen die Position des Arrays aus, indem wir das Array mit print_r drucken (array_values ​​($ matches));

6 - Dies ist der Code, den Sie ändern müssen. Seine Linie 500 befindet sich in der Datei class.phpmailer-bmh.php

  // 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_\-\+][email protected][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;

Also vergessen wir die zurückgegebenen Header und konzentrieren uns auf die schlechten E-Mails. Sie können sie Excel übertreffen, Sie können MySQL verwenden, oder Sie können alles bearbeiten, was Sie möchten.

IMPORTANT Kommentieren Sie die Echos in callback_echo.php im Beispielverzeichnis, andernfalls erhalten Sie den gesamten Junk, bevor Sie ihn drucken.

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;
}

MEINE AUSGABE

Connected to: mail.chasqui.market ([email protected])
Total: 271 messages 
Running in disable_delete mode, not deleting messages from mailbox

[email protected]

...

[email protected]

Closing mailbox, and purging messages
Read: 271 messages
0 action taken
271 no action taken
0 messages deleted
0 messages moved
0
Luis H Cabrejo

Hier ist eine vorgefertigte Lösung zur Verarbeitung von Bounces mit IMAP.

Ich habe den Return-Path-Header meiner Mail-Instanz in eine dedizierte [email protected] geändert

Die einzige Methode, die ich für möglich halten kann, ist die folgende, die den dedizierten Posteingang über POP3 überprüft und jede E-Mail basierend auf der erhaltenen Nachricht verarbeiten kann.

$inst=pop3_login('mail.xxxxxx.us','110','[email protected]','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)); 
} 
0
Dustin Flick

Mit imap_open können Sie über PHP auf Ihre Mails zugreifen.

Diese Funktion funktioniert auch für POP3, jedoch funktioniert hier möglicherweise nicht jede Funktion. Ich denke jedoch, dass 2018 die meisten E-Mail-Clients IMAP unterstützen sollten.

Diese Funktion kann auch zum Öffnen von Streams zu POP3 und NNTP .__ verwendet werden. Server, aber einige Funktionen und Funktionen sind nur auf IMAP verfügbar Server.

Hier ein kleines Beispiel, wie Sie Ihre E-Mails durchlaufen können:

  /* connect to server */
  $hostname = "{$your-server:$your-port}INBOX";
  $username = 'my-username';
  $password = '123';

  /* try to connect */
  $inbox = imap_open($hostname,$username,$password) or die('Cannot connect to mailbox: ' . imap_last_error());

  /* grab emails */
  $emails = imap_search($inbox,'ALL');

  /* if emails are returned, cycle through each... */
  if($emails) {
    /* for every email... */
    foreach($emails as $email_number) {

        $message = imap_body($inbox,$email_number,2);
        $head    = imap_headerinfo($inbox, $email_number,2);
        // Here you can handle your emails
        // ...
        //  ...
      }
  }

In meinem Fall weiß ich, dass meine Postzustellung immer von [email protected] fehlgeschlagen ist. So konnte ich solche Sprünge identifizieren:

if($head->from[0]->mailbox == 'Mailer-Daemon')
{
  // We have a bounce mail here!
}

Du sagtest:

Wenn die E-Mail nicht gesendet werden kann, wird sie an [email protected], die .__, gesendet. Fehlermeldung könnte 553 sein (nicht vorhandene E-Mail ...) usw.

Wenn Ihre Bounce-E-Mails den Betreff "E-Mail-Versand fehlgeschlagen: Fehler 553" haben, können Sie sie anhand des Betreffs folgendermaßen identifizieren:

if($head->subject == 'Mail delivery failed: Error 553')
{
  // We have a bounce mail here!
}

Die fehlerhafte E-Mail-Adresse befindet sich nicht in der Kopfzeile. Sie müssen sie also mit etwas Smartcode aus der $message-Variablen analysieren.

0
Adam

Ich habe nach der Antwort auf dieselbe Frage gesucht. Es gibt mehr Teile der Frage und mehr Optionen.

Für die Handhabung der abgelehnten E-Mails habe ich eine PHP -Klasse gefunden , rein in PHP, keine Kompilierung oder zusätzliche Softwareinstallation, wenn Sie eine PHP -basierte Site haben. Es ist sehr einfach zu bedienen.

Wenn Sie cPanel oder InterWorx/SiteWorx verwenden, können Sie einige Adressen so konfigurieren, dass die empfangenen E-Mails mit einem Skript verarbeitet werden, z. B. mit einem PHP -Skript. So können Sie mit Hilfe von die erwähnte Klasse. Oder Sie können natürlich immer noch normale E-Mail-Konten erstellen und die Mails über POP3 oder IMAP abrufen und anschließend interpretieren. Ich denke, der erste ist besser, denn es ist direkt, Sie müssen keine zusätzlichen Kanäle wie IMAP verwenden. Wenn Sie Ihren Mail-Server nicht konfigurieren können oder nicht wissen, wie dieser Vorgang ausgeführt werden soll, ist der erste Server für Sie besser.

Viel Glück! :)

0
Tamás Barta

Wir verwenden Procmail, um diese Art von Mails zu filtern. Nachdem wir einige der hier bereits erwähnten Lösungen untersucht hatten, erhielten wir ein einfaches Procmail-Rezept, um Bounce-Nachrichten zu erkennen. Abhängig von der Genauigkeit, die Sie benötigen, kann dies auf Ihre Situation zutreffen.

Weitere Informationen finden Sie in diesem Blogeintrag .

0
claasz

Im php mail-Befehl http://php.net/mail

sie verwenden den fünften Parameter und fügen "-f" hinzu.

Sie verwenden also "-f [email protected]" als Parameter

der phpList-Newsletter-Manager verwendet dies zur Verwaltung von Bounces.

Sobald die Abpraller in der Mailbox aufgefüllt sind, können Sie sie POPs bearbeiten und verarbeiten. Das ist der einfachste Weg, mit ihnen umzugehen, anstatt sie bei ihrer Ankunft zu behandeln.

0
michiel

ich hatte ziemlich viel Pech bei der Suche nach einer PHP - Lösung, aber ich bin auf dieses Produkt gestoßen, das genau das macht, was ich brauchte. 

es läuft als native app mac/win, erledigt aber die arbeit.

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

0
Jazzy

Sie können immer etwas wie http://cloudmailin.com verwenden, um die abgelehnten E-Mails über http an Ihren PHP-Server weiterzuleiten. Sie können jedoch einen Dienst zum Versenden von E-Mails und zum Abrufen der Absprungsdaten verwenden .

0
Steve Smith