E-Mails per PHP einlesen und 1:1 weiterleiten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • E-Mails per PHP einlesen und 1:1 weiterleiten

    servus zusammen,

    ich wende mich an euch, weil ich vor einem problem stehe und vllt. jemand von euch weiter weiß. ich will folgendes realisieren: ein php-script, das ein imap/pop3 postfach liest (per cronjob) und diese emails an verschiedene adressen weiterleitet, die auf basis einer mysql-datenbank ermittelt werden. einfach dargestellt sieht die user-tabelle wie folgt aus:

    id | nickname | email
    1 | max | max@max.de
    2 | bernd | bernd@bernd.de
    usw.

    so. nun checke ich per php (siehe code unten) das postfach (catchall) und lese die emails ein. dann wird in der datenbank nachgesehen, ob es einen user gibt, dessen nickname mit dem empfänger der email übereinstimmt und an die email-adresse dieses users soll dann die email 1:1 weitergeleitet werden. ich habe mein script schon soweit, dass er das ganze so durchführt, allerdings scheitere ich an der 1:1 weiterleitung. es fehlen also anhänge und die emails sind meistens ein durcheinander an wilden html-tags (bei newslettern bspw.) usw.

    weiß jemand, wie es möglich ist, die email einfach 1:1 wie sie ist per php-mail weiterzuschicken? wäre super! danke für alle tipps! ;)

    ps: mein bisheriger code

    Quellcode

    1. <?php
    2. $mail = imap_open('{localhost:110/pop3}INBOX','catchall@test.de','passwort') OR die('-');
    3. $messageCount = imap_num_msg($mail);
    4. echo $messageCount.' emails gefunden';
    5. echo '<hr>';
    6. for($i=1;$i<=$messageCount;$i++) {
    7. $number = $i;
    8. $messageBody = imap_body($mail,$number);
    9. $messageHeader = imap_header($mail,$number);
    10. $messageStructure = imap_fetchstructure($mail,$number);
    11. $messageEncoding = intval($messageStructure->encoding);
    12. $headerMessageId = $messageHeader->message_id;
    13. $headerSubject = $messageHeader->subject;
    14. $headerDate = $messageHeader->date;
    15. if($messageEncoding == 0){
    16. //$messageBody = imap_7bit($messageBody);
    17. $messageBody = $messageBody;
    18. } elseif($messageEncoding == 1) {
    19. $messageBody = imap_8bit($messageBody);
    20. } elseif($messageEncoding == 2) {
    21. $messageBody = imap_binary($messageBody);
    22. } elseif($messageEncoding == 3) {
    23. $messageBody = imap_base64($messageBody);
    24. } elseif($messageEncoding == 4) {
    25. $messageBody = quoted_printable_decode($messageBody);
    26. } elseif($messageEncoding == 5) {
    27. $messageBody = $messageBody;
    28. }
    29. $headerSubjectTemp = imap_mime_header_decode($headerSubject);
    30. $headerSubject = utf8_decode($headerSubjectTemp[0]->text);
    31. $toPersonal = $messageHeader->to[0]->personal;
    32. $toAddress = $messageHeader->to[0]->mailbox.'@'.$messageHeader->to[0]->host;
    33. $fromPersonal = $messageHeader->from[0]->personal;
    34. $fromAddress = $messageHeader->from[0]->mailbox.'@'.$messageHeader->from[0]->host;
    35. $date = $messageHeader->udate;
    36. $sqlCheck = "SELECT email FROM users WHERE nickname = '".addslashes($messageHeader->to[0]->mailbox)."' LIMIT 1";
    37. $resCheck = mysql_query($sqlCheck);
    38. if(mysql_num_rows($resCheck) == 1) {
    39. $rowCheck = mysql_fetch_assoc($resCheck);
    40. $headers = "MIME-Version: 1.0\n";
    41. $headers .= "Content-type: text/html; charset=utf-8\n";
    42. $headers .= "From: ".$fromPersonal." <".$fromAddress.">\n";
    43. $headers .= "Date: ".date('r',$date)."\n";
    44. mail(stripslashes($rowCheck['email']),$headerSubject,$messageBody,$headers);
    45. }
    46. echo '<hr>';
    47. echo 'to: '.$toAddress.'<br>';
    48. echo 'from: '.$fromAddress.'<br>';
    49. echo 'subject: '.$headerSubject.'<br>';
    50. echo 'date: '.$date.' '.date('d.m.Y, H:i:s',$date).' Uhr<br>';
    51. echo 'body: '.$messageBody.'<br>';
    52. echo '<hr>';
    53. imap_delete($mail,$number);
    54. }
    55. imap_expunge($mail);
    56. imap_close($mail);
    57. ?>
    Alles anzeigen
  • Also das IMAP Protokoll bietet nichts zum versenden, und somit auch nichts zum forwarden über den IMAP Client.
    Dafür muss man SMTP nutzen. Also erst abholen, dann verschicken. Man muss es über php implementieren.

    Du solltest die Mail möglichst ROH abholen. Und einen Befehl haben um die Mail wieder möglichst roh zu verschicken.
    Was du per imap_headers reinbekommst, solltest du also einfach direkt ins php mail Kommando geben, etc
    Was fertiges dafür habe ich leider auch nicht gefunden.

    Halte uns auf dem Laufenden wie du voran kommst.