Mike1990 Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 Ich verwende imap_fetchbody um Dateianhänge in meinen Ticket System zu speichern. Allerdings kommen die Daten da falsch rein. Warum weiß ich nicht... es werden alle Daten die einen zu langen durchgehenden Text haben abgeschnitten und da wird ein = hingepackt. Das darf natürlich nicht sein da die Daten 1:1 gespeichert werden sollen. Als test habe ich diese Datei versendet (diese Datei ist der Dateianhang als test.txt) Dies ist ein testttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt ttsadaSDASDGFDDDDDDDDDDDDASDFASDS;FMXKSFHDCASNMXHALDJCHNCLAFXKHFSUMIFCHASDFXASDFSDAAFCXADFCASDFXASDFSDAFCXADSFCSDFCASXDFSADFCSAFXASDFCASFXADFSDFCASXFSDFCACSFXASDFCSDFCSDXFSDFCSFXSDFVASSHBGFJNGHMJGFBDVHFGCSFAXDEC TESTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHJJJJJJJJJJJJJJJJJJJJJJJJJJDDDDDDDDDDDDDDDDDDDSSSSSSSSSSSS Und dies hat imap_fetchbody mir aus gegeben. Dies ist ein =3D testttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt= =3D ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt= =3D ttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttt= =3D tttttttttttttttttttttttttttttttttttttttttttttt ttsadaSDASDGFDDDDDDDDDDDDASDFASDS;FMXKSFHDCASNMXHALDJCHNCLAFXKHFSUMIFCHAS= =3D DFXASDFSDAAFCXADFCASDFXASDFSDAFCXADSFCSDFCASXDFSADFCSAFXASDFCASFXADFSDFCA= =3D SXFSDFCACSFXASDFCSDFCSDXFSDFCSFXSDFVASSHBGFJNGHMJGFBDVHFGCSFAXDEC TESTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTDDDDDDDDDDDDDD= =3D DDDDDDDDDDDDDDDDDDDDDDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGG= =3D GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH= =3D HHHJJJJJJJJJJJJJJJJJJJJJJJJJJDDDDDDDDDDDDDDDDDDDSSSSSSSSSSSS Weiß einer woran das liegt? Zitieren
Amstelchen Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 die codierung sieht mir verdächtig nach quoted-printable aus. ein blick in die schöne doku von PHP: imap_fetchbody - Manual bestätigt mir das auch. verwende quoted_printable_decode(), um das als plaintext zu bekommen. s'Amstel Zitieren
Mike1990 Geschrieben 20. Oktober 2008 Autor Geschrieben 20. Oktober 2008 Muss ich das in Jeden Fall anwenden? Oder nur bei bestimmten Daten? Oder wann genau muss ich das sonst anwenden? Zitieren
Grandmasta Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 Na immer dann, wenn die Dateien so kodiert sind. Wenn du Dateien speichern willst, die Base64 kodiert sind, musst du die auch entsprechend dekodieren. Die Kodierung der Mail sollte eigentlich im Header stehen. Zitieren
Mike1990 Geschrieben 20. Oktober 2008 Autor Geschrieben 20. Oktober 2008 Habe es mit quoted_printable_decode() probiert aber ist kein unterschied zwischen vorher und nachher. Zitieren
Amstelchen Geschrieben 20. Oktober 2008 Geschrieben 20. Oktober 2008 (bearbeitet) na dann ist entweder dein PHP kaputt, oder... versuch doch mal, nur einige quoted-printable-zeichen durch die funktion zu jagen: H=E4tten H=FCte ein =DF im Namen, w=E4ren sie m=F6glicherweise keine H=FCte= mehr, sondern H=FC=DFe. achja, =3D entspricht dem gleichheitszeichen, sonst ist da nix quoted-printable drin. gibt also für die funktion ausser =3D zu decoden nix zu tun und insofern hast du recht - eingabe ist (beinahe) gleich ausgabe. s'Amstel Bearbeitet 20. Oktober 2008 von Amstelchen Zitieren
geloescht_JesterDay Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 (bearbeitet) Habe es mit quoted_printable_decode() probiert aber ist kein unterschied zwischen vorher und nachher. Schau doch einfach im Header nach was für ein transfer encoding da verwendet wurde. Dafür steht es doch da drin. Eine EMail ist nur Text, aber Text ist nicht gleich Text Bzw vielleicht musst du den Inhalt ja auch erst selbst encoden (jenachdem wie du das versendest und was du nutzt). Eine Mail (nur Textinhalt) ist normalerweise immer quoted-printable codiert. Damit eben auch alle Zeichen korrekt übertragen werden. EDIT: Oh, du hatttest das ja als Anhang. Ist deine Mail komplett selbst erstellt oder über eine fertige Klasse (phpMailer oder so)? Auch da solltest du ein entsp. Encoding verwenden und dass auch in der Mail angeben, wenn selbst erstellt. Bearbeitet 21. Oktober 2008 von JesterDay Zitieren
Mike1990 Geschrieben 21. Oktober 2008 Autor Geschrieben 21. Oktober 2008 Die Email werden von meiner Seite aus mit den phpmailer versendet. Die Mail wo ich den anhang getestet habe wurde aber von outlook versendet. Zitieren
geloescht_JesterDay Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 Die Mail wo ich den anhang getestet habe wurde aber von outlook versendet. Auch Outloook hält sich ja an den Mailaufbau. Also würde ich erstmal nachsehen wie das Encoding des Anhangs ist. Eigentlich liefert die Mail alles was du brauchst an Infos um sie zu lesen. Zitieren
Mike1990 Geschrieben 21. Oktober 2008 Autor Geschrieben 21. Oktober 2008 Habe mir mal alle daten vom Anhang ausgeben lassen. Dies sind die Daten. Der Inhalt der Textdatei ist der den ich ganz oben aufgeschrieben habe. stdClass Object ( [type] => 0 [encoding] => 4 [ifsubtype] => 1 [subtype] => PLAIN [ifdescription] => 0 [ifid] => 0 [lines] => 13 [bytes] => 803 [ifdisposition] => 1 [disposition] => ATTACHMENT [ifdparameters] => 1 [dparameters] => Array ( [0] => stdClass Object ( [attribute] => FILENAME [value] => test.txt ) ) [ifparameters] => 1 [parameters] => Array ( [0] => stdClass Object ( [attribute] => NAME [value] => test.txt ) ) ) [/PHP] Type ist 0... Hier ist nochmal meine function die das decodiert. Die müsste eigentlich richtig sein. Und nach den Typ müsste es imap_8bit decodiert werden... [PHP] function getdecodevalue($message, $coding) { if ($coding == 0) { $message = imap_8bit($message); } elseif ($coding == 1) { $message = imap_8bit($message); } elseif ($coding == 2) { $message = imap_binary($message); } elseif ($coding == 3) { $message = imap_base64($message); } elseif ($coding == 4) { $message = imap_qprint($message); } elseif ($coding == 5) { $message = imap_base64($message); } return $message; } Zitieren
Aiun Geschrieben 21. Oktober 2008 Geschrieben 21. Oktober 2008 lass dir den Plain-Header ausgeben, da steht dann irgendwo "encoding", "charset" und "content-type" und dann dekodiere den Inhalt entsprechend. Zitieren
geloescht_JesterDay Geschrieben 22. Oktober 2008 Geschrieben 22. Oktober 2008 Also mir hätte es jetzt erstmal mehr gebracht wenn du einfach die Mail als Text hier gepostet hättest Zitieren
Mike1990 Geschrieben 22. Oktober 2008 Autor Geschrieben 22. Oktober 2008 Wie die Email als text gepostet? Die komplette Email oder wie? Verstehe jetzt nicht genau was du meinst ^.~ Zitieren
geloescht_JesterDay Geschrieben 22. Oktober 2008 Geschrieben 22. Oktober 2008 Verstehe jetzt nicht genau was du meinst ^.~ Den "Quelltext" der Mail. Ganz genau. Nichts anderes stellen ja die imap_objekte dar, nur hat man da erstmal nen Überblick, und IMHO auch einen einfacheren, was die Mail eigentlich ist, was sie enthält, enthalten soll und ob da nicht vielleicht schon was nicht ganz korrekt ist. Ach ja, nicht einfach die Mail aus deinem Outlook o.ä. kopieren... wobei, wenn du das mit den imap Funktionen abholst... is schon zu lange her, aber da wird es doch auch eine Möglichkeit geben die eigentliche Quelle auszugeben, oder? Und weiter sprichst du ja von type 0, aber eigentlich gemeint ist ja das encoding, was da oben 4 ist (was immer das genau bedeutet). Dennoch ist der Mailquelltext nichts schlechtes. Wenn du mal kapiert hast was eigentlich eine eMail ist und wie sie aufgebaut ist, dann verstehst du auch besser was du da in den Objekten vor dir hast. IMHO. Zitieren
Mike1990 Geschrieben 27. Oktober 2008 Autor Geschrieben 27. Oktober 2008 Danke für die Info... habe mich die ganze zeit gewundert worans liegen könnt und hab gar nicht daran gedacht anstatt type den encoding wert zu nehmen der benötigt wird. Habe jetzt encoding benutzt und nun klappt alles einwandfrei. Danke nochmals Mit freundlichen Grüßen Mike1990 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.