Verzeiflung... Mails lesen

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

  • Verzeiflung... Mails lesen

    so, nachdem ich nun schon das meiste meines Frontends für mein Mailsystem fertig habe, stehe ich vor einem großen Problem:

    Ich hole die mails vom POP3 server ab und speichere sie in den entsprechenden Ordner, bis jetzt klappt auch alles wunderbar...

    nun mein Problem: ich kann die gespeicherten TXT dateien wunderbar in z.B. Outlook öffnen und habe eine Perfekte mail mit Headern, anhang und so, allerdings wie kann ich die mail online lesbar machen? wenn ich datei einfach öffne und in meine Website lade, bekomme ich die gesammte mail mit header und co.. das will ich ja gar nicht ich will nur den Text ausgegeben bekommen...

    ich hoffe das mir jemand weiterhelfen kann! und bitte verweißt mich nicht auf die PEAR::MIME klassen oder sonstiges, da ich die schon alle durchhabe und trotzdem nicht weiterkomme.
    Zuletzt geändert von jupp.s; 12.11.2004, 08:32.
    .
    .http://www.Nightkillerz.de
    .

  • #2
    Naja, wenn du nix fertiges nehmen willst weil du damit nich klar komst müßtest du dir selber einen Kleinen Parser/Interpreter bauen, der das ganze aufdröselt und es in schön formatiertes XHTML/CSS umwandelt....
    Dazu mußt du dir erst anschauen nach welchem Schema/welcher Gramatik die Mail-dateien aufgebaut sind. Dann kannst du die daten auslesen, formatiert wieder ausgeben(am besten indem du ein Template benutzt)

    Sollte nich alzu schwer sein denke ich.... (versuchs ohne regexps)
    Zuletzt geändert von Tartax; 12.11.2004, 08:25.
    Die Musikreview Seite

    hi, i'm a signature virus. copy me into your signature to help me spread.

    Kommentar


    • #3
      also ich habe es ja schon mit der PEAR klasse decoden lassen, dann bekomme ich ein schönes übersichtiches XML dokument.. allerdings kriege ich meien daten da immernoch nicht rausgefiltert, die ich auch wirklich brauche...
      .
      .http://www.Nightkillerz.de
      .

      Kommentar


      • #4
        wenn dus so herum machen willst such doch einfach mal nach einem XML parser, gibts sogar hier im Forum die ein oder andere kleine Klasse!
        Die Musikreview Seite

        hi, i'm a signature virus. copy me into your signature to help me spread.

        Kommentar


        • #5
          ok, dann werd mich mal umsehen und es versuchen.. allerdings würde ich andere vorschläge auch gerne lesen..!
          .
          .http://www.Nightkillerz.de
          .

          Kommentar


          • #6
            Hallo,

            Es wäre sicherlich einfacher, wenn du die Mails bereits beim Einlesen aus dem POP3 aufsplittest:
            PHP-Code:
            <?php
            // Postbox öffnen
            $mbox imap_open ("{".$pop3_server."/pop3:110}INBOX",$postfach,$passwort);

            // Feststellen wieviele Mails in der Box sind
            $headers imap_headers ($mbox);
            $max count($headers);

            // Jede in der Box vorhandene Mail auslesen
            for ($i $max$i 0$i--)
            {
             
            $header imap_header ($mbox,$i);
             
            $from $header->from;
             
            $email $from[0]->mailbox."@".$from[0]->host;
             
            $date $header->date;
             
            $date split(" ",$date);
             
            $struktur imap_fetchstructure ($mbox,$i);
             
            $kodierung $struktur->encoding;
             
            $body substr(imap_body ($mbox,$i));

            // Quoted-Printable- und Base64-Kodierung umwandeln und HTML-Sonderzeichen kodieren
             
            if ($kodierung == 4)
             {
              
            $body htmlentities(quoted_printable_decode($body), ENT_QUOTES);
             }
             elseif (
            $kodierung == 3)
             {
              
            $body htmlentities(base64_decode($body), ENT_QUOTES);
             }
             else
             {
              
            $body htmlentities($bodyENT_QUOTES);
             }
            // Zeilenumbrüche
             
            $body eregi_replace("\*br","\n<br>",$body);

            // Verbindung trennen 
            imap_close ($mbox);
            (Code nicht getestet, müsste aber laufen...)

            Wenn du jetzt noch die ausgelesenen Mails in einer DB speicherts, kannst du dir diese schön übersichtlich ausgeben.

            Gruss
            GDF

            Kommentar


            • #7
              Vielen dank, das werde ich jezt mal direkt probieren.. ist auch glaube ich die einfachste lösung....

              allerdings habe ich noch eine frage:

              warum substr bei " $body = substr(imap_body ($mbox,$i)); "

              string substr ( string string, int start [, int length])
              substr() gibt den Teil von string zurück, der durch die Parameter start und length definiert wurde.
              es wird doch gar kein start und lengh angegeben...

              und was passiert wenn die mail sowohl TXT als auch HTML enthält und einen Anhang hat...? (<--Base64-Kodierung umwandeln und HTML-Sonderzeichen kodieren)

              kann ich den anhang da auch herausfiltern und zwischenspeichern?

              EDIT:
              ich kann die imap funktionen nicht nutzen.. :-( also muss ich bei meiner alten methode bleiben..
              Zuletzt geändert von jupp.s; 15.11.2004, 00:43.
              .
              .http://www.Nightkillerz.de
              .

              Kommentar


              • #8
                Haalo,

                der substr kam noch aus meinem code, hatte eigentlich gar nix drin zu suchen. Da du nicht imap nutzen kannst, schau mal HIER .

                Gruss
                GDF

                Kommentar


                • #9
                  Original geschrieben von GDF
                  Haalo,

                  der substr kam noch aus meinem code, hatte eigentlich gar nix drin zu suchen. Da du nicht imap nutzen kannst, schau mal HIER .

                  Gruss
                  GDF

                  Erst dieser Thread hat mich auf die Idee gebracht...

                  ich neutze allerdings nicht die klasse aus diesem Thread, sondern eine etwas abgeänderte... (http://www.phpclasses.org/browse.html/package/1120.html)

                  Trotzdem vielen dank!

                  mitlerweile habe ich es auch falst soweit das ich aus den gespeichertne mails den Body auslesen kann... experimentiere noch ein wenig rum..
                  .
                  .http://www.Nightkillerz.de
                  .

                  Kommentar


                  • #10
                    Also, mitlerweile bin ich soweit, dass ich meinen <MESSAGE> teil herausgefiltert bekomme...

                    Jetz meine abschließende frage:

                    Wie kann ich jetz den überflüßigen rest entfernen, so das ich ne schöne darstellung des Mail-inhaltes habe?

                    hier ein Beispiel, wie es jetzt aussieht:

                    Code:
                    <MESSAGE> 
                    This is a multi-part message in MIME format.
                    
                    ------=_NextPart_000_0016_01C4BD97.6F6ECBE0
                    Content-Type: text/plain;
                    	charset="iso-8859-1"
                    Content-Transfer-Encoding: quoted-printable
                    
                    testmail f=FCr mein mailsystem...
                    
                    hallo hallo test ets
                    
                    mail02 mit mehr text
                    ------=_NextPart_000_0016_01C4BD97.6F6ECBE0
                    Content-Type: text/html;
                    	charset="iso-8859-1"
                    Content-Transfer-Encoding: quoted-printable
                    
                    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
                    <HTML><HEAD>
                    <META http-equiv=3DContent-Type content=3D"text/html; =
                    charset=3Diso-8859-1">
                    <META content=3D"MSHTML 6.00.2800.1458" name=3DGENERATOR>
                    <STYLE></STYLE>
                    </HEAD>
                    <BODY bgColor=3D#ffffff>
                    <DIV>
                    <DIV><FONT face=3DArial size=3D2>testmail f=FCr mein =
                    mailsystem...</FONT></DIV>
                    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
                    <DIV><FONT face=3DArial size=3D2>hallo hallo test ets</FONT></DIV>
                    <DIV><FONT face=3DArial size=3D2></FONT>&nbsp;</DIV>
                    <DIV><FONT face=3DArial size=3D2>mail02 mit mehr=20
                    text</FONT></DIV></DIV></BODY></HTML>
                    
                    ------=_NextPart_000_0016_01C4BD97.6F6ECBE0--
                    
                    </MESSAGE>
                    .
                    .http://www.Nightkillerz.de
                    .

                    Kommentar


                    • #11
                      Hallo Jupp

                      ich habe mir übers Weekend mal ein eigenes Webinterface für Mail gebastelt. Um die Daten vom Server zu holen habe ich TBT's Klasse (hier auf dem Forum verwendet).
                      Die Funktion, die du zum Aufsplitten der Mailbereiche brauchst ist preg_split(). Um diese korrekt zu verwenden brauchst du einen eindeutigen Trenner. Hier empfiehlt sich mittels eines preg_match() und eines preg_replace(), die Boundary aus dem Header auszulesen, welche du dann auf eine Var speicherst.
                      $temp = Body der gesamten Mail
                      $boundary = Boundary wie sie im Header der Mail stehen
                      PHP-Code:
                      $data preg_split("--$boundary",$temp);
                      $count count($data);
                      for(
                      $i=0;$i<=$count;$i+=1)
                      {
                             if(
                      strstr($data[$i],"text/plain"))
                             {
                                    
                      dann musst du alles Filtern bis auf den Inhalt;
                             }
                             [
                      weitere Header suchen und die Parts bearbeiten]

                      Du musst bei den einzelnen Bereichen schauen, wie du nur die Daten "ausschneiden" kannst. Aber dann ist es ganz einfach. Bei Bildern musst du beachten, dass du diese vor der Ausgabe erst per base64_decode() decodieren musst.

                      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


                      • #12
                        Vielen Dank, das ist genau das was mir jezt gefehlt hat...

                        allerdings bekomme ich folgenden Fehler:

                        "Warning: Unknown modifier '-' in ..."

                        bei der zeile:

                        "$data = preg_split("--$boundary",$input);"

                        und meine $boundary enthält auch das minuszeichen

                        kann man das irgendwie umgehen?
                        .
                        .http://www.Nightkillerz.de
                        .

                        Kommentar


                        • #13
                          ok, ich habe nun "preg_split" durch "explode" ersetzt und es funktioniert...

                          Falls ihr noch etwas an meinem Code verbessern würdet bitte ich um eure meinung!

                          PHP-Code:
                          $data explode("--$boundary",$input);
                          $count count($data);
                          for(
                          $i=0;$i<=$count;$i+=1)
                          {
                                 if(
                          strstr($data[$i],"text/plain"))
                                 {
                                  
                          // Textmail auslesen
                                     
                          $text_plain .= $data[$i];
                                 }
                                 elseif(
                          strstr($data[$i],"text/html"))
                                 {
                                  
                          // HTML mail auslesen
                                     
                          $text_html .= $data[$i];
                                 }

                          .
                          .http://www.Nightkillerz.de
                          .

                          Kommentar


                          • #14
                            Salut Jupp

                            "Warning: Unknown modifier '-' in ..."
                            Das sollte sich so umgehen lassen:
                            PHP-Code:
                            $data preg_split("'--$boundary'",$temp); 
                            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


                            • #15
                              Hallo,

                              kennt jemand Funktion, mit der ich 8 Bit, 7 Bit oder binär kodierte Emails dekodieren kann?

                              mfg rogerworld

                              Kommentar

                              Lädt...
                              X