Inhalt in Array schreiben

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

  • Inhalt in Array schreiben

    Hallo,

    ich hab einfach ein Problem und weiß nicht wie ich es lösen kann.
    Ich habe in einem Array eine ganze Mime-Codierte Nachricht, möchte aus dieser folgenden Inhalt lesen und in ein Array schreiben:


    PHP-Code:
    [mail inhalt]
    ------------
    A3824A3FA0715C Content-Typeimage/jpegname="preimage.jpg" Content-transfer-encodingbase64 
    Content
    -Dispositionattachmentfilename="preimage.jpg" /9j/4AAQSkZJRgABAgEASABIAAD/4RBJRXhpZgAATU0AKgAAAAgAB
    wESAAMAAAABAAEAAAEa 
    [zur Ansicht gekürzt]
    AAUAAAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAI
    AAAAUAAAAcgEyAAIAAAAU 
    fQA8
    +/de6N717/ACjv5dnWx8mH+MWzM9UM yPJUdhZDdHZIkdAAD9lvrO5/FwKbcpFTxox+o9+690eHYnVPV3
    V2OTD9Z9b7C67xMShY8Zsb Z
    +3tp49FUAKFo8DjqCnFrD+z7917pfe/de697917r3v3Xuve/
    de697917r3v3Xuve/de6979 17r3v3Xuve/de697917r/9k= ------------A3824A3FA0715C-- ) 
    Der Inhalt der ins Array geschrieben werden muss sollte also nach filename="preimage.jpg" beginnen und bei den Zeichen ---- wieder aufhören.

    Ich hab nur keinen Plan wie bzw. mit welcher Methode das machbar ist.

    Hat jemand einen Tipp für mich?

    Danke,

    Christoph

  • #2
    preg_match
    strings

    Kommentar


    • #3
      Wenn die Mail korrekt codiert ist, dann kannst du die Boundary (Trenner) aus dem Header auslesen. Danach verwendest du preg_split() mit dem ausgelesenen Trenner. Danach sollte das von preg_split() zurückgelieferte Array auf Pos 0 den Inhalt samt header Daten haben.
      Der letzte header einer mail (also unmittelbar bevor der content kommt) sollte mit einem doppelten CRLF abgeschlossen werden.
      Probier also so etwas in der Art
      PHP-Code:
      $temp explode("\r\n\r\n",$array[0]);

      //Damit sollte $temp[1] der Inhalt sein 
      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


      • #4
        danke für eure hilfen, leider raffe ich das preg_split absolut nicht, habs mir gerade angeschaut und blicke null durch.

        Bei preg_match gibt er mir ja nur immer die aktuelle Zeile aus?!

        Kommentar


        • #5
          Schau dir erstmal die Emailheader an. Dann schreibst du einen RegExp (preg_match), der das Boundary Zeichen findet. Dann schickst du das ganze mittels preg_split() durch einen weiteren RegExp. Der Rückgabewert von preg_split ist ein Array. Und dieser Array sollte auf Pos 0 den Inhalt haben. Diesen musst du aber noch um die header Daten kürzer machen. Darum ein weiterer preg_match diesmal auf den doppelten CRLF. Et voilà der Inhalt sollte ausgelesen sein.
          array preg_split ( string pattern, string subject [, int limit [, int flags]] )
          Der String Pattern ist die Boundary und das Subject der String (der Inhalt der Mail)

          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


          • #6
            Ok, ich glaub ich hab mich in meinem ersten Post schlecht ausgedrückt. Es soll lediglich der Abschnitt, wo der Anhang (reine Bilddatei) gezeigt wird in das Array gelesen werden.

            Den Inhalt bekomme ich ja schon ausgegeben, nur hab ich Probleme damit nur die einzelnen Anhänge auszulesen und in ein Array zu schreiben

            Kommentar


            • #7
              Wenn ich jetzt sage:

              PHP-Code:
              preg_match('#Content-Type: image(.*)#i',$mail,$imagejpg); 
              gibt er mir lediglich 1 zeile zurück:

              PHP-Code:
              Content-Typeimage/jpegname="700-168241w.JPG" 

              Kommentar


              • #8
                Du musst aber erst den Boundary auslesen !! Auch mittels preg_match. Danach zerteilst du die GESAMTE mail mittels preg_split am Boundary.

                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

                Lädt...
                X