2017-09-26 1 views
0

Ich arbeite derzeit an einem Projekt, das eine Reihe von Daten verarbeitet, die von einem CSV importiert wird. Sobald die Daten für diese bestimmte Zeile verarbeitet wurden, wird eine E-Mail an die für diese Zeile angegebene E-Mail-Adresse gesendet.Capture Bounce E-Mail-Adressen über PHP

Mein Client hat eine Anforderung, dass sie wissen müssen, ob eine E-Mail aufgrund einer falschen E-Mail-Adresse, die in den CSV eingegeben wurde, abprallt.

sende ich zur Zeit die E-Mails von PHP verwenden und einen SMTP Relais, das Host wir, Der einzige Weg, die ich gefunden habe bisher zu arbeiten, ist die Senden E-Mail Adresse für die E-Mails zu scannen, die den Gegenstand Undelivered Mail Returned to Sender enthalten.

Das funktioniert perfekt und ich bekomme eine Liste aller E-Mails, die zurückgeschickt haben. Mein Problem ist, dass ich die E-Mail-Adresse erhalten muss, die falsch eingegeben wurde. Wenn Sie den folgenden Screenshot sehen, können Sie sehen, dass das Skript ein HTML-Element/Knoten generiert, der die E-Mail-Adresse enthält.

HTML Element/Node

Meine Frage ist, Wie kann ich greifen/dieses Element nennen?

Ich habe versucht print_r in der E-Mail-Objekt, leider gibt es keine Array-Index mit der E-Mail-Adresse, die ich benötige.

Bitte siehe meinen Code unten, um zu sehen, wie ich so weit gekommen bin:

<?php 

    $date = date('y-m-d'); 
    $hostname = ''; 
    $username = ''; 
    $password = ''; 

    $inbox = imap_open($hostname,$username,$password) or die('Cannot 
    connect to mailbox: ' . imap_last_error()); 
    $emails = imap_search($inbox,'SUBJECT "Undelivered Mail Returned to Sender" ON "'.$date.'"'); 


    if($emails){ 
    rsort($emails); 
     foreach($emails as $email){ 
      $overview = imap_fetch_overview($inbox,$email,0); 
      $message = imap_body($inbox, $email); 
      print_r($overview); 
      print_r($message); 
      echo '<br>'; 

      print_r($email); 
     } 
    } 

Vielen Dank für Ihre ausgezeichnete Hilfe und Unterstützung in der Vergangenheit.

Lewis

+0

Haben Sie Codebeispiele haben? Die Adresse muss irgendwo da sein. – Kyrre

+0

Hinzugefügt den Code, wie ich die E-Mails ergreife, Der einzige Ort, an dem die E-Mail-Adresse angegeben ist, ist in dem HTML-Knoten, auf den ich zuvor hingewiesen habe. Danke –

+1

Ich habe 'imap_search() '' nie benutzt, aber ich sehe, dass Sie die 'SUBJECT' und' ON' Schlüsselworte benutzen .. entsprechend http://php.net/manual/en/function.imap-search. php, gibt es ein TO-Schlüsselwort. Vielleicht kannst du mit der Abfrage etwas Magie machen, vielleicht ein Wildcarding? Tut mir leid, wenn ich belästige und nicht helfe, aber was enthält '$ emails'? – Kyrre

Antwort

1

David und Kyrre schafften es, mir in die richtige Richtung zu zeigen, nach ein wenig mehr Forschung konnte ich finden, dass die E-Mail-Adresse auch als eine Final-Recipient nach ein wenig Forschung, wie man die Final-Recipient ich war in der Lage zu finden nimm was ich brauche.

Um dies zu tun, habe ich die folgende, wie auf diesem SA Thread diskutiert: Regular expression to parse Final-Recipient email header

$message = imap_body($inbox, $email); 
    $pattern = '/Final-Recipient: rfc822; (.*)/'; 
    $matches = Array(); 
    preg_match($pattern, $message, $matches); 
    $email = $matches[1]; 
0

Als @Kyrre die imap_search() String erwähnt, so tun, es ist eine SQL-Abfrage. Die Antwort auf geblockte E-Mails wurde mit here beantwortet. Es gibt auch this Sweet Walk durch, die den gesamten Inhalt der E-Mail-Nachricht zurückgibt.