Mails in PHP lesen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mails in PHP lesen

    Hallo
    ich probiere nun seit einem Monat Mails aus meinem Postfach in einer php Datei zu sehen und in die Datenbank zu speichern.
    Ich habe es bis jetzt geschaft den Body Teile auszulesen, nur jetzt fehlt mir noch der Header.
    Ich habe es bis jetzt auch geschaft den Header des Postfachs zu sehen, nur ich möchte, dass ich alle Daten des Headers in einzelnen Variablen habe, also den Absender , den Empfänger, Betreff usw.
    Ich habe hier im Forum auch schon danach gesucht nur ohne Erfolg. Auch in der Script Sammlung habe ich nichts passendes gefunden.
    Hier ist noch mein PHP Code

    PHP-Code:
    <?
    $mbox = imap_open ("{localhost:110/pop3}", "user", "passwort");

    echo "<p><h1>Mailboxes</h1>\n";
    $folders = imap_listmailbox ($mbox, "{localhost:110/pop3}", "*");
    if ($folders == false)
        echo "Call failed<br>\n";
    else
        while (list ($key, $val) = each ($folders))
            echo $val . "<br>\n";

    echo "<p><h1>Headers in INBOX</h1>\n";
    $headers = imap_headers ($mbox);
    if ($headers == false)
        echo "Call failed<br>\n";
    else
        while (list ($key, $val) = each ($headers))
            echo $val . "<br>n";



    echo "<p><h1>Body in INBOX</h1>\n";
    $headers = imap_body($mbox, "1");
    if ($headers == false)
        echo "Call failed<br>\n";
    else
    $date = $headers;
    $text1 = nl2br( $date );
            echo $text1 . "<br>";
    imap_close ($mbox);
    echo $val;
    ?>

  • #2
    na, die monate hättest du dir sparen können! hier läuft irgendwo ne fertige klasse rum!

    nur ich möchte, dass ich alle Daten des Headers in einzelnen Variablen habe, also den Absender , den Empfänger, Betreff usw.
    manual gelesen?

    Kommentar


    • #3
      Suchen im Forum nach POP3 Klasse von TBT
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Original geschrieben von TobiaZ
        na, die monate hättest du dir sparen können! hier läuft irgendwo ne fertige klasse rum!

        manual gelesen?
        meinst du mit manual http://de.php.net/imap?
        Wenn ja da habe ich mein Script weg.
        Nur dort kommei ch nicht weiter. Die haben zu vielen Funktionen keine Beispiele mehr

        Kommentar


        • #5
          dennoch sind dort alle fkt. dokumentiert.

          Nur beispiele abtippen hat in meinen augen nicht mehr viel mit Programmieren zu tun.

          Kommentar


          • #6
            habe noch ein bisschen rumprobiert und komme jetzt nicht mehr weiter
            PHP-Code:
            echo "<p><h1>Headers in INBOX</h1>\n";
            $headers imap_headers ($mbox);
            if (
            $headers == false)
                echo 
            "Call failed<br>\n";
            else
                while (list ( 
            $val) = each ($headers))
            echo 
            $val;

            echo 
            "#########";
            echo 
            $val
            warum werden beim ersten $val Zahlen angezeigt und beim zweiten nicht?
            Und wenn ich das oben so mache $test = $val; und ich dann $test per echo ausgebe wird nur die letzte zahl angezeigt warum?

            Ich möchte nämlich gerne die zahlen von 1- ... also wenn ich 4Mails im Postfach habe möchte ich die Zahlen so stehen haben 1234
            Zuletzt geändert von themonk; 06.01.2005, 20:06.

            Kommentar


            • #7
              warum werden beim ersten $val Zahlen angezeigt und beim zweiten nicht?
              Unwahrscheinlich! WIE hast du das überprüft?

              - weiter hab ich nicht gelesen-

              Kommentar


              • #8
                Habe mal den Code so geändert, wie du es wohl gemacht hast:
                Original geschrieben von themonk
                PHP-Code:
                while (list ( $val) = each ($headers))
                $test $val// Ende der Schleife, also wird nur das letzte $val ausgegeben
                echo $val;

                echo 
                "#########";
                echo 
                $val
                Vielleicht setzt du dann bitte alle Anweisungen, die pro Schleifendurchlauf
                abgearbeitet werden sollen in geschweifte Klammern? { }

                Kommentar


                • #9
                  Habs mit ner while Schleife hinbekommen.
                  Das ganze sieht so aus
                  PHP-Code:
                    $i 1;
                  while (
                  $i <= $nummer) {
                  Scripte

                  und unten wird dann i um eins vergrößert.
                  Nun kommt die nächste Frage.
                  Ich habe jetzt fast alles fertig ausser zwei dinge, einemal möchte ich das Datum einzeln auslesen und zweitens den E-Mail Anhang möchte ich haben.
                  Wenn ich jetzt einen E-Mail mit Anhang im Body sehe, sieht das so aus
                  This is a MIME encapsulated multipart message -
                  please use a MIME-compliant e-mail program to open it.

                  Dies ist eine mehrteilige Nachricht im MIME-Format -
                  bitte verwenden Sie zum Lesen ein MIME-konformes Mailprogramm.

                  --========GMXBoundary253351105102357
                  Content-Type: text/plain; charset="us-ascii"
                  Content-Transfer-Encoding: 7bit

                  gggtext

                  --
                  +++ Sparen Sie mit GMX DSL +++ http://www.gmx.net/de/go/dsl
                  AKTION für Wechsler: DSL-Tarife ab 3,99 EUR/Monat + Startguthaben
                  --========GMXBoundary253351105102357
                  Content-Type: image/pjpeg; name="bild.jpg"
                  Content-Transfer-Encoding: base64
                  Content-Disposition: attachment; filename="bild.jpg"

                  (Mehrere Zeilen mit solchen Buchstaben)
                  /9j/4AAQSkZJRgABAQEAyADIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB
                  (ganz unten)
                  --========GMXBoundary253351105102357--
                  Wie ihr seht habe ich die Mail von GMX geschickt habe die dinge drin gelassen vielleicht helfen die euch weiter

                  Kommentar


                  • #10
                    Salut

                    damit du nur das Attachment kriegst musst du folgendes machen:

                    1. Den gesamten Body der mail an --========GMXBoundary253351105102357 mittels preg_split() aufteilen.

                    2. Aus den einzelnen Elementen, die preg_split() erstellt musst du dann die jeweiligen Header-Infos rausschneiden:
                    Content-Type: image/pjpeg; name="bild.jpg"
                    Content-Transfer-Encoding: base64
                    Content-Disposition: attachment; filename="bild.jpg"
                    Diese würden sonst, das "Zurückverwandeln" des Bildes verhindern.

                    3. Wenn du den Bild Bestandteil hast, dann musst du noch base64_decode() verwenden um wieder eine darstellbare Form des Bildes zu erhalten.

                    4. Am besten in eine Datei speichern und in der Anzeige der Mail einen Link auf das Bild setzen.

                    5. Wie bereits schon mal erwähnt suche in den Code Schnipseln mal nach TBT's POP3 Klasse. In diesem Thread werden auch die Möglichkeiten des Herausfiltern einzelner Headerelemente erläutert.
                    EDIT:
                    anbei der Link zum Thread POP3 Thread


                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      Hallo
                      1. Den gesamten Body der mail an --========GMXBoundary253351105102357 mittels preg_split() aufteilen.

                      2. Aus den einzelnen Elementen, die preg_split() erstellt musst du dann die jeweiligen Header-Infos rausschneiden:
                      Das habe ich so gemacht
                      PHP-Code:
                      $test preg_split("/[\s,]+/"$headers);
                      print_r($test); 
                      $headers ist der gesamte body also das was ich vorher hier gepostet habe.
                      Dabri kam dann das hier raus
                      Array ( [0] => This [1] => is [2] => a [3] => multi-part [4] => message [5] => in [6] => MIME [7] => format [8] => -- [9] => Dies [10] => ist [11] => eine [12] => .....
                      Damit kann ich doch nicht viel mit anfangen oder?

                      3. Wenn du den Bild Bestandteil hast, dann musst du noch base64_decode() verwenden um wieder eine darstellbare Form des Bildes zu erhalten.
                      Ich habe das jetzt um zu testen anderes gemacht. Ich habe den Inhalt also diese Buchstaben gewire in einen Variable gepeichert und sie dann so versucht zu decodieren
                      PHP-Code:
                      $headers =  base64_decode($text);

                      echo 
                      $headers
                      $text ist hierbei das Buchstabensalat

                      Wenn ich mir nun das ganze angucke sieht das noch schlimmer aus
                      ÿØÿàJFIFÈÈÿÛC
                      5. Wie bereits schon mal erwähnt suche in den Code Schnipseln mal nach TBT's POP3 Klasse. In diesem Thread werden auch die Möglichkeiten des Herausfiltern einzelner Headerelemente erläutert.
                      Da komme ich nicht viel weiter funktioniert nicht und das Attachment geht da auch noch nicht sthet zumindest auf der TODO
                      TODO: MIME Mails and Attachment

                      Kommentar


                      • #12
                        Nur kurz zu 1.

                        wieso trennst du offensichtlich nach leerzeichen???

                        Kommentar


                        • #13
                          Original geschrieben von TobiaZ
                          Nur kurz zu 1.

                          wieso trennst du offensichtlich nach leerzeichen???
                          nach was soll ich den sonst trenne?
                          Hab nur möglichkeiten gefunden zum trennen nach leerzeilen und nach Buchstaben.

                          EDIT:
                          Hab nun nach Zeien umbrüchen getrennt mit
                          PHP-Code:
                          $test explode ("\n"$headers);
                          print_r($test); 

                          Zuletzt geändert von themonk; 07.01.2005, 19:17.

                          Kommentar


                          • #14
                            Ähm, hab ich was anderes gelesen als du?

                            1. Den gesamten Body der mail an --========GMXBoundary253351105102357 mittels preg_split() aufteilen.

                            Kommentar


                            • #15
                              Original geschrieben von TobiaZ
                              Ähm, hab ich was anderes gelesen als du?
                              Ne das habe ich auch gelesen nur ich habe das mit preg_split nicht hinbekommen oder was meinst du?

                              Kommentar

                              Lädt...
                              X