Archiv verlassen und diese Seite im Standarddesign anzeigen : 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
<?
$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;
?>
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?
jahlives 06-01-2005, 15:17 Suchen im Forum nach POP3 Klasse von TBT
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
dennoch sind dort alle fkt. dokumentiert.
Nur beispiele abtippen hat in meinen augen nicht mehr viel mit Programmieren zu tun.
habe noch ein bisschen rumprobiert und komme jetzt nicht mehr weiter
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
warum werden beim ersten $val Zahlen angezeigt und beim zweiten nicht? Unwahrscheinlich! WIE hast du das überprüft?
- weiter hab ich nicht gelesen-
Habe mal den Code so geändert, wie du es wohl gemacht hast:
Original geschrieben von themonk
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? { }
Habs mit ner while Schleife hinbekommen.
Das ganze sieht so aus
$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
jahlives 07-01-2005, 16:59 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.
anbei der Link zum Thread POP3 Thread (http://www.php-resource.de/forum/showthread.php?s=&threadid=11993)
Gruss
tobi
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
$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$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
Nur kurz zu 1.
wieso trennst du offensichtlich nach leerzeichen???
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.
Hab nun nach Zeien umbrüchen getrennt mit $test = explode ("\n", $headers);
print_r($test);
Ähm, hab ich was anderes gelesen als du?
1. Den gesamten Body der mail an --========GMXBoundary253351105102357 mittels preg_split() aufteilen.
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?
Original geschrieben von themonk
]Hab nun nach Zeien umbrüchen getrennt mit ...Und warum trennst du nicht nach
--========GMXBoundary253351105102357 ?
Original geschrieben von Heini81
Und warum trennst du nicht nach
--========GMXBoundary253351105102357 ?
Erstens, weil GMXBoundary253351105102357 nicht immer da steht wenn ich mir ne mail von web mit Anhang schicke ist das nicht so und wenn ich über ein Script mir ne mail mit Anhang schicke sthet unten garnnichts.
Und Zweitens finde ich nicht wie ich nach einem Bestimmten Wort trennen kann
deswegen sollst du ja preg_ benutzen.
Muss nochmal ausdrücklich sagen, dass ich den Thread nicht komplett gelesen habe, sondern lediglich auf aktuelle Postings antworte...)
ghostgambler 08-01-2005, 14:27 Original geschrieben von themonk
Erstens, weil GMXBoundary253351105102357 nicht immer da steht wenn ich mir ne mail von web mit Anhang schicke ist das nicht so und wenn ich über ein Script mir ne mail mit Anhang schicke sthet unten garnnichts.
Und Zweitens finde ich nicht wie ich nach einem Bestimmten Wort trennen kann
http://www.ietf.org/rfc/rfc1341.txt?number=1341
Lesen!
Rausfinden: wie, was, wo und warum!
Pattern für preg_split/preg_match/sonstwas basteln!
Benutzen!
Fertig!
Was ist das Problem? Wenn du es wirklich vernünftig haben willst, wirst du nicht drumherum kommen das RFC zu lesen um rauszufinden, wie das denn genau funktioniert, was diese Zeile oben ist, wie man sie vielleicht rausfinden kann, sonstwas.....du erwartest von uns, dass wir das können, aber wir haben nunmal auch keinen Bock das alles zu lesen, damit dein Code funktioniert....
Du kannst natürlich auch auf gut Glück einfach mal mit preg_split trennen nach den Strichen, irgendwas mit Boundary und dahinter ne Zahl, nur wer weiß ob das immer so funktioniert, wie du es willst....
Original geschrieben von ghostgambler
du erwartest von uns, dass wir das können, aber wir haben nunmal auch keinen Bock das alles zu lesen, damit dein Code funktioniert
Ne erwarten tu ich das nicht und ich will auch nicht das ihr euch extra Arbeit macht und die Texte für mich lest .
Aber es hätte ja sein können das irgendwer in diesem Forum das selbe wie ich vor hatte und dann mir dabei helfen könnte ohne sich extra Arbeit zu machen.
ghostgambler 08-01-2005, 16:03 Original geschrieben von themonk
Ne erwarten tu ich das nicht und ich will auch nicht das ihr euch extra Arbeit macht und die Texte für mich lest .
Aber es hätte ja sein können das irgendwer in diesem Forum das selbe wie ich vor hatte und dann mir dabei helfen könnte ohne sich extra Arbeit zu machen.
Scheint nicht so....
okay, du hast es geschafft, ich lese mir grade das RFC durch ^^
Also, ich habs jetzt mal überflogen und bin dabei auf folgendes gestoßenFrom: Nathaniel Borenstein <nsb@bellcore.com>
To: Ned Freed <ned@innosoft.com>
Subject: Sample message
MIME-Version: 1.0
Content-type: multipart/mixed; boundary="simple
boundary"
This is the preamble. It is to be ignored, though it
is a handy place for mail composers to include an
explanatory note to non-MIME compliant readers.
--simple boundary
This is implicitly typed plain ASCII text.
It does NOT end with a linebreak.
--simple boundary
Content-type: text/plain; charset=us-ascii
This is explicitly typed plain ASCII text.
It DOES end with a linebreak.
--simple boundary--
This is the epilogue. It is also to be ignored.
Und der Rest dürfte eigentlich selbsterklärend sein, oder?
E-Mail-Header einlesen, nach dem Header MIME-Version suchen, wenn nicht da, E-Mail normal ausgeben. Wenn da, weiter suchen nach Content-type, diesen splitten, sodass man dass hinter boundary bekommt.
Und dann auf die Message
$teile = eplode('teil zwischen den Anführungszeichen hinter boundary= im Header der Mail+\r\n, damit das nicht mit drin ist im Array und davor müssen noch zwei Bindestriche--', 'e-Mail-Body')
Und dann hast du in $teile ein schönes Array, mit allen Teilen der Mail.
Wie du oben noch siehst, muss dein Skript alles in E-Mail-Body, was vor dem ersten vorkommen des Boundarys kommt ignorieren und das dahinter auch, also nur das, was eingeschlossen ist von nem Boundary
Der String boundary trennt die Mail jedoch nicht nur, sondern wie eben in der Funktion steht, kommen in der Mail davor noch 2 Bindestriche
--simple boundary
Und das Ende wird durch nochmal 2 Unterstriche hinter dem simple boundary markiert
--simple boundary--
und alles was dahinter kommt, muss auch wieder ignoriert werden.
Außerdem muss dein Skript noch die "zusätzlichen MIME-Header" vor dem Inhalt von jedem boundary parsen, d.h. auslesen wie es kodiert ist, dementsprechen dekodieren, rausfinden, was das für ein Typ von boundary ist (um dem User nicht eine per base64 verschlüsselte Grafik vor den Latz zu knallen), usw.
Der Rest sollte aus dem kleinen Beispiel oben hervorgehen, und ich habe mir dafür nicht das gesamte RFC durchgelesen, d.h. soviel Arbeit war das nicht, d.h. die hättest du auch locker selbst machen können, d.h.: Wenn du das nächste mal so ein Problem hast, machsu erstmal selbst was und kommst angekrochen, wenn du nicht weiter weißt und unsere Hilfen dich auch nicht mehr weiter bringen
So, ich geh frühstücken :cool:
Hallo
erstmal danke für diese Erklärung.
Aber mein erstes Problem ist schon da E-Mail-Header einlesen
Wie soll das gehen?
Ich lese den Header so ein
echo "From Address: ";
echo $fromaddr=sprintf("%s@%s",
$from[0]->mailbox,
$from[0]->host).
"<BR>";
echo "Personal : ".
$from[0]->personal.
"<br>";
echo "Adl : ".
$from[0]->adl.
"<br>";
echo "Mailbox : ".
$from[0]->mailbox.
"<br>";
echo "Host : ".
$from[0]->host.
"<br>";
echo "Subject : ".
$subject.
"<br>";
echo "Date : ".
$date.
"<br>";
echo "To Address : ".
$header->toaddress.
"<br><BR><BR>";
und dann wird mir das ganze so angezeigt.
From Address: email@adress.de
Personal : Emai Name
Adl : steht bei mir gar nichts
Mailbox : name der Mailbox der gesendet hat
Host : von welcehm anbieter
Subject : betreff
Date :datum
To Address : zu@mir.de
Aber das ist nicht so angeordnet wie es hier steht http://www.ietf.org/rfc/rfc1341.txt?number=1341 und bei php.net habe ich keinen andere möglichkeiten im Header gefunden.
Hier könnt ihr euch das mal ansehen wie das aussieht
http://test.h-denkena.de/
Die erste Mail habe ich von GMX geschickt die zweite über ein Script
penizillin 08-01-2005, 17:23 hab jetzt nicht den ganzen thread gelesen, aber "echo" liest nichts ein, sonder gibt etwas aus.
ghostgambler schlägt vor, das, was ausgibst, erstmal auszuwerten. sehe ich das richtig?
Original geschrieben von penizillin
hab jetzt nicht den ganzen thread gelesen, aber "echo" liest nichts ein, sonder gibt etwas aus.
ghostgambler schlägt vor, das, was ausgibst, erstmal auszuwerten. sehe ich das richtig?
ja echo gibt was aus.
Aber es schadet doch auch nicht, wenn man erst ausgiebt die Daten gehen dabei ja nicht verloren.
Wie soll ich das den Auswerten?
ghostgambler hat gesagt das ich erstmal das ganze überprüfen soll, ob in dem Text MIME-Version steht.
Aber er hat auch gesagt das ich den E-Mail-Header einlesen soll und das habe ich ja auch versucht.
Nur ich bekomme diese Daten mit MIME nur in den Body.
ghostgambler 08-01-2005, 18:00 Original geschrieben von themonk
Hallo
erstmal danke für diese Erklärung.
Aber mein erstes Problem ist schon da
Wie soll das gehen?
Ich lese den Header so ein
echo "From Address: ";
echo $fromaddr=sprintf("%s@%s",
$from[0]->mailbox,
$from[0]->host).
"<BR>";
echo "Personal : ".
$from[0]->personal.
"<br>";
echo "Adl : ".
$from[0]->adl.
"<br>";
echo "Mailbox : ".
$from[0]->mailbox.
"<br>";
echo "Host : ".
$from[0]->host.
"<br>";
echo "Subject : ".
$subject.
"<br>";
echo "Date : ".
$date.
"<br>";
echo "To Address : ".
$header->toaddress.
"<br><BR><BR>";
und dann wird mir das ganze so angezeigt.
Aber das ist nicht so angeordnet wie es hier steht http://www.ietf.org/rfc/rfc1341.txt?number=1341 und bei php.net habe ich keinen andere möglichkeiten im Header gefunden.
Hier könnt ihr euch das mal ansehen wie das aussieht
http://test.h-denkena.de/
Die erste Mail habe ich von GMX geschickt die zweite über ein Script
was ist denn $from[0]->mailbox und $from[0]->host???
Wie bekommst du die Daten überhaupt?
Also ich gehe jetzt einfach mal davon aus, dass du den Mailheader in der Variablen $header und den Mailbody in $body hast, wenn dem nicht so ist, pack sie einfach so zusammen. So kannst du die eigentlich auch in der Datenbank speichern, weil das theoretisch am praktischsten ist.
Und wenn du eh nur Mails abrufen willst, ist IMAP etwas hochgegriffen, d.h. ich würd auf POP3 umsteigen, z.B. nimmst du die Klasse, die in der Kategorie Codeschnipsel ist, ich glaub von TBT wurd die gemacht. Ist zwar schon 2, 3 Jahre alt, und unterstützt auch nicht alle Kommandos, aber sie macht das, was du willst ^^
Also, ich gehe mal davon aus, du hast den E-Mail-Header in $header, der dann ungefähr so aussieht:
Subject: Text
MIM-Version: 1.0
From: me@localhost
To: you@localhost
usw.
Und dann lässt du nur über den Header ein preg_match laufen, z.B.
// Für das Subject
$pattern = "#Subject: (.+)\r\n#U";
preg_match($pattern, $header_der_mail, $matches);
echo '<pre>' . print_r($matches, true) . '</pre>';
Das Problem können dabei höchstens Header sein, die über mehrere Zeilen gehen, diese werden bei dem pattern nicht mitrausgesucht. D.h. du müsstest den Header zuerst einer Sache unterziehen, die sich da nennt: "unfolding"
Weil das n bissle kompliziert zum erklären ist, hab ich mal kurz ne Funktion geschrieben, die dir das so macht, dass du den preg_match rüberlaufen lassen kannstfunction unfold(&$header)
{
$pattern = "#\r\n[\t ]+#";
$replace = " ";
$header = preg_replace($pattern, $replace, $header);
return true;
}
Ob du die Funktion noch änderst, sodass sie dir den Header zurückgibt, anstatt die original-Variable zu ändern, ist deine Sache
So, wo war ich jetzt???...irgendwie hab ich den Faden verloren *drop*.....öh, ich glaub ich war fertig ^^, du nutzt zuerst die unfold-Funktion auf den Header und danach einen ähnlichen Pattern wie oben um den Teil des Headers zu bekommen, den du haben willst. Und damit wäre das Problem doch dann beseitigt, oder?
btw. sehe ich grade, dass die Funktion, die du nutzt den E-Mail-Header als Array zurückgibt, ich weiß nicht, ob dann noch der \r\n am Ende vorhanden ist. Sollte dieser weg sein, dann musst du den aus dem Pattern auch entfernen (blöde IMAP-Funktionen -_-)
Also wenn du die Mails wirklich nur abrufen/speichern/lesen willst, würde ich dir wirklich zu POP3 raten! IMAP ist mehr für eine Dauerconnection zum Server gedacht, deshalb gibt es ja auch so Sachen wie "Ordner auf dem Server erstellen" usw. und PHP ist nunmal nicht dafür da, um lange ausgeführt zu werden, d.h. ich würd eine POP3-Klasse nutzen, E-Mails abrufen, in MySQL speichern und dann die Ausgabe formatieren.
Wenn dir das, was die Klasse von TBT kann zu wenig ist (POP3 kann auch noch ein bisschen mehr), kann ich dir auch meine Klasse geben, die nicht so "handlich" ist, wie die von TBT (fast jede Funktion gibt ein Array zurück, mit nem Haufen Schlüssel und Werte), aber dafür die komplette Sammlung an POP3-Kommandos unterstütz, unter anderem auch das APOP-Kommand, welches das Passwort verschlüsselt über die Leitung schickt, ich weiß zwar nicht, ob alle Server das unterstützen, aber sie kann es zumindest *Werbung macht* :D
Aehja.....verdau das erstmal, was du jetzt hast und komm dann wieder :p
würde ich dir wirklich zu POP3 raten
Ich wusste ehrlich gesagt gar nicht, das da ein Unterschied ist :rolleyes:
Ist POP3 nicht komplizierter mit den Klassen?
Also wenn ich jetzt das ganze mit POP3 machen will. Dann kan ich das von php.net(http://de3.php.net/imap) und das was du eben geschrieben hast vergessen ?
Also versuche ich es jetzt mit POP3 scheint bei meinem vorhaben besser zu sein. Mit dem Codeschnipsel von TBT habe ich mich schon auseinandere gesetzt nur wieder erfolglos :( . Zum Code (http://www.php-resource.de/forum/showthread.php?s=&threadid=11993&perpage=10&pagenumber=1)
In der pop3.class.php brauche ich nichts ändern stimmts?
Dann habe ich die andere Datei so geändert
<?
include 'pop3.class.php';
$server = "localhost"; ## oder localhost:110/pop3 ???
$port = 110;
$user = "user";
$pass = "pw ";
$pop3 = POP3( $server, $port, $user, $pass );
if ( !$pop3error = $pop3->open() ) {
Ist das Richtig?
Wenn dir das, was die Klasse von TBT kann zu wenig ist (POP3 kann auch noch ein bisschen mehr), kann ich dir auch meine Klasse geben, die nicht so "handlich" ist, wie die von TBT (fast jede Funktion gibt ein Array zurück, mit nem Haufen Schlüssel und Werte), aber dafür die komplette Sammlung an POP3-Kommandos
Auf jeden Fall kan die das was wir hier besprochen haben auch nicht steht zumindest in der TODO "TODO: MIME Mails and Attachment"
Also wenn ich jetzt das ganze mit POP3 machen will. Dann kan ich das von php.net(http://de3.php.net/imap) und das was du eben geschrieben hast vergessen ? du kannst mit den imap-funktionen auch auf pop3 zugreifen. steht aber auch da!
Ja das würde auch gehen.
Aber in diesem code von TBT steht soweit ich das gesehn habe nichts was auch auf php.net steht, also hat POP3 eigene Funktionen.
Deshalb habe ich das geschrieben.
nochmal zu dem Beitrag von eben mit der Verbindung.
Muss das localhost sein oder das was ich bei Outlook auch für POP3 eingebe?
ghostgambler 08-01-2005, 19:12 Original geschrieben von themonk
Aber in diesem code von TBT steht soweit ich das gesehn habe nichts was auch auf php.net steht, also hat POP3 eigene Funktionen.
Deshalb habe ich das geschrieben.
Die Klasse kontaktiert den Server direkt, und nutzt dann die F***-Funktionen, die Funktionen von PHP werden das so ähnlich wohl auch machen...
<?
include 'pop3.class.php';
$server = "mail.gmx.net";
$port = 110;
$user = "78999irgendwas";
$pass = "top_secre*g*";
$pop3 = POP3( $server, $port, $user, $pass );
if ( !$pop3error = $pop3->open() ) {
So würde es bei mir lauten, bei GMX, wenn du deinen Mailserver lokal hast, kommt da localhost hin, aber ich denke mal nicht, dass du so einen hast ^^
Also das, was du als pop-Server bekommst. Heißen auch manchmal pop.host.domain, oder pop3.host.domain, der eben nur mail.host.domain, füg einfach das ein, was du hast XD
Auf jeden Fall kan die das was wir hier besprochen haben auch nicht steht zumindest in der TODO "TODO: MIME Mails and Attachment"
Ach vergiss das einfach mal...
IMO gehört das gar nicht in die Klasse rein, das muss das "RestSkript" machen.
So würde es bei mir lauten, bei GMX, wenn du deinen Mailserver lokal hast, kommt da localhost hin, aber ich denke mal nicht, dass du so einen hast ^^
Also das, was du als pop-Server bekommst. Heißen auch manchmal pop.host.domain, oder pop3.host.domain, der eben nur mail.host.domain, füg einfach das ein, was du hast XD
Also bei Outlook gebe ich bei POP3 pop3.h-denkena.de ein und Kontoname : Usernamep1
Also bei mir sieht das jetzt so aus
1. Version
include 'pop3.class.php';
$server = "pop3.h-denkena.de";
$port = 110;
$user = "user";
$pass = "pw";
$pop3 = POP3( $server, $port, $user, $pass );
1. Version
include 'pop3.class.php';
$server = "localhost";
$port = 110;
$user = "user";
$pass = "pw";
$pop3 = POP3( $server, $port, $user, $pass );
und immer kommt
Fatal error: Call to undefined function: pop3() in /srv/www/htdocs/.../mail.php on line 10 Das ist in Zeile 10 "$pop3 = POP3( $server, $port, $user, $pass );"
Der Fehler kommt auch, wenn ich gar nichts eingebe
Original geschrieben von TobiaZ
wo wird pop3 definiert?
Was meinst du damit?
In pop3.class.php?
mir egal wo. Hauptsache es wird irgendwo definiert/iniziiert.
Wenn du Klassen benutzt, dann eigne dir bitte auch die Grundlagen an. Copy & Paste macht keinen Programmierer aus!!!
ghostgambler 09-01-2005, 18:42 Original geschrieben von themonk
Was meinst du damit?
In pop3.class.php?
Ja, TobiaZ recht, das solltest du selbst dir aneignen ^^
Also, wenn du wirklich noch mehr mit PHP machen willst, zieh dir ein Tut rein (z.B. meines http://www.coding.at/tutorials.php?id=6), wenn dich das alles nicht weiter interessiert, schreibst du statt dessen mal hin:
$pop3 = new POP3( $server, $port, $user, $pass ); und probierst dann weiter, bis es funktioniert :D
Original geschrieben von ghostgambler
Ja, TobiaZ recht, das solltest du selbst dir aneignen ^^
Also, wenn du wirklich noch mehr mit PHP machen willst, zieh dir ein Tut rein (z.B. meines http://www.coding.at/tutorials.php?id=6), wenn dich das alles nicht weiter interessiert, schreibst du statt dessen mal hin:
$pop3 = new POP3( $server, $port, $user, $pass ); und probierst dann weiter, bis es funktioniert :D
Das Problem ist nun weg ich glaube nun geht das ganze werde morgen den rest ändern.
Tja, wer die Grundlagen beherrscht... :D
ghostgambler 09-01-2005, 21:48 Original geschrieben von themonk
werde morgen den rest ändern.
Na dann haben wir (die Helfer im Forum) ja morgen was zutun :D
Original geschrieben von ghostgambler
Na dann haben wir (die Helfer im Forum) ja morgen was zutun :D
Seid ihr wieder nett
Hallo
habe gedacht dasi ch das Problem schnell gelöst bekomme ist aber leider nicht so. hier mal der Code
$row = "";
for( $ii = 1;$ii <= count( $mail_sizes );++$ii ) {
$sqlkommando = "SELECT * FROM mails ";
$sqlanfrage = mysql_query($sqlkommando) or die("Error: " . mysql_error());
while($daten = mysql_fetch_object($sqlanfrage))
{
$alreadyhave = $daten->mail_id;
echo $alreadyhave;
if ( in_array( $ids[$ii], $alreadyhave ) ) { // alreadyhave ist ein Array mit Mailids ##Zeile 34
continue; // welche nicht nochmal vom Server geholt werden
}}
So und jetzt die Fehler
Warning: in_array(): Wrong datatype for second argument in /srv/www/htdocs/.../mail.php on line 34 Bei eoch $already wird eine Zahl angezeigt.
Und einen Weitere Frage
Weiter unten im Script habe ich echo"<br>$sql<br>"; eingefügt jetzt habe ich im Postfach 1 Nachricht diese wird 2 Mal angezeigt (Ich glaube das leigt daran das ich in die Tabelle Mails 2 Mal was eingegeben habe )
Und warum wird in meinen Tabelle nichts eingetragen
mysql_query("insert into system_mails (mailserver_id,server_id,header,body) values $sql" ) or die(mysql_error());
ghostgambler 10-01-2005, 18:56 Original geschrieben von themonk
So und jetzt die Fehler
Bei eoch $already wird eine Zahl angezeigt.
$already muss ein Array sein, dass die unique-Ids der Mails beinhaltet, die du schon in MySQL drin hast
d.h. keine Zahl
Für einen Vorschlag von TBT zum rausfinden der vorhandenen Mails den Thread bis zum Ende lesen...
Und warum wird in meinen Tabelle nichts eingetragen
Weiß nicht, ist ja deine Tabelle XP
Was sagt denn phpMyAdmin? Ist der Datensatz da, oder fehlt er?
Und was ist in $sql???
Original geschrieben von ghostgambler
$already muss ein Array sein, dass die unique-Ids der Mails beinhaltet, die du schon in MySQL drin hast
d.h. keine Zahl
Verstehe ich nicht. already muss doch irgendwas sein was in mailserver_id sthet oder nicht?
Das hieri st von TBT $alreadyhave = $query->select_single("select mailserver_id from system_mails where server_id=" . $server[$i][0]);
Für einen Vorschlag von TBT zum rausfinden der vorhandenen Mails den Thread bis zum Ende lesen...
Meinst du damit die Seite 2?
Weiß nicht, ist ja deine Tabelle XP
Was sagt denn phpMyAdmin? Ist der Datensatz da, oder fehlt er?
Und was ist in $sql???
phpMyAdminsagt nichts es wird gar nichts eingetragen. Aber mein Code sagt was
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''('1090',,'Return-Path: X-Original-To: info
Und sql gibt das hier aus
'1090',,'Return-Path: X-Original-To: mail@mail.de Delivered-To: user@ipx10799.ipxserver.de Received: from mail.gmx.net (pop.gmx.net [222.165.64.20]) by ipx10799.ipxserver.de (Postfix) with SMTP id 5A3093540F5 for ; Sun, 9 Jan 2005 20:08:34 +0100 (CET) Received: (qmail 31384 invoked by uid 0); 9 Jan 2005 19:08:24 -0000 Received: from 217.84.253.87 by www31.gmx.net with HTTP; Sun, 9 Jan 2005 20:08:24 +0100 (MET) Date: Sun, 9 Jan 2005 20:08:24 +0100 (MET) From: \"Name\" To:mail@mail.de MIME-Version: 1.0 Subject: rewr X-Priority: 3 (Normal) X-Authenticated: #9752341 Message-ID: <876.1185297704@www31.gmx.net> X-Mailer: WWW-Mail 1.6 (Global Message Exchange) X-Flags: 0001 Content-Type: text/plain; charset=\"us-ascii\" Content-Transfer-Encoding: 7bit X-UIDL: E$P\"!hh\"!!\\[&#!JY;!! Status: RO ','rewrwe -- http://www.h-denkena.de Homepage und Schul Help +++ GMX - die erste Adresse für Mail, Message, More +++ 1 GB Mailbox bereits in GMX FreeMail http://www.gmx.net/de/go/mail '),(
ghostgambler 10-01-2005, 20:16 Original geschrieben von themonk
Verstehe ich nicht. already muss doch irgendwas sein was in mailserver_id sthet oder nicht?
Jede Mail bekommt vom Server eine Unique-id, diese wird bei der Klasse mit zurückgeliefert.
D.h. du machst einen Query, wo du nur diese Zeile abrufst von allen Mails, packst das, was du bekommst, in ein Array (foreach benutzen, z.B.) und übergibst das Array an die FUnktion
phpMyAdminsagt nichts es wird gar nichts eingetragen. Aber mein Code sagt was
Und sql gibt das hier aus
Nett, dass du jetzt mit der Fehlermeldung ankommst >_>
insert into system_mails (mailserver_id,server_id,header,body) values $sql"
Da müsste die mailserver_id einfach nur eine Kennzeichnung für den Account sein, d.h. ich denke nicht, dass du mehr als 1000 E-Mail-Accounts hast...woher kommt die erste Zahl?
Die zweite Spalte bleibt leer??? Da muss die unique-ID rein, wenn ich mich nicht täusche....
btw. würde ich nicht addslashes verwenden, dann musst du die ganzen Slashes bei der Ausgabe wieder strippen. Nutz statt dessen mysql_real_escape !!!
Da z.B. $P\"!hh\"!!\Oder ist das Absicht?
Original geschrieben von ghostgambler
Jede Mail bekommt vom Server eine Unique-id, diese wird bei der Klasse mit zurückgeliefert.
D.h. du machst einen Query, wo du nur diese Zeile abrufst von allen Mails, packst das, was du bekommst, in ein Array (foreach benutzen, z.B.) und übergibst das Array an die FUnktion
Also ich muss in meine Datenbank schauen und dann die zeile mailserver_id ausgeben und als Variable für already Speichern?
insert into system_mails (mailserver_id,server_id,header,body) values $sql"
Da müsste die mailserver_id einfach nur eine Kennzeichnung für den Account sein, d.h. ich denke nicht, dass du mehr als 1000 E-Mail-Accounts hast...woher kommt die erste Zahl?
Die zweite Spalte bleibt leer??? Da muss die unique-ID rein, wenn ich mich nicht täusche....
btw. würde ich nicht addslashes verwenden, dann musst du die ganzen Slashes bei der Ausgabe wieder strippen. Nutz statt dessen mysql_real_escape !!!
Da z.B. Oder ist das Absicht?
Wie jetzt?
Meine Postfächer heißen web123p1 und das soll ich in die Zeile mailserver_id speichern? server_id =unique-ID ? und Header und Body?
Da wird doch nicht dieses sql so eingefügt?
Meintst du wirklich mysql_real_escape? da kommt bei mir Call to undefined function: mysql_real_escape() und php.net kennt nur mysql_real_escape_string und ide macht das selbe wie addsl..
ghostgambler 10-01-2005, 21:46 Original geschrieben von themonk
Also ich muss in meine Datenbank schauen und dann die zeile mailserver_id ausgeben und als Variable für already Speichern?
nix ausgeben:
$result = mysql_query('SELECT server_id FROM mails');
$alreadyhave = array();
while ($row = mysql_fetch_assoc($result))
{
$alreadyhave[] = $row['server_id'];
}
Damit hast du dann in Array alle Werte, aller DB-Einträge, die in server_id sind. Das müssen dann natürlich nur noch die unique-ids sein.
Wie jetzt?
Meine Postfächer heißen web123p1 und das soll ich in die Zeile mailserver_id speichern? server_id =unique-ID ? und Header und Body? [QUOTE]
Zum Testen verwendest du doch eh nur ein Postfach, oder? Dann kannst du dir die mailserver_id klemmen. in Server_id kommen die unique-ids der Mails, die der Mailserver gibt. Header und Body sind E-MailHeader/Body und dann brauchst du noch eine Spalte id mit autoincrement, für deine DB
Und dann gehst ans Nutzen der Klasse.
[QUOTE]Da wird doch nicht dieses sql so eingefügt?
Meintst du wirklich mysql_real_escape? da kommt bei mir und php.net kennt nur mysql_real_escape_string und ide macht das selbe wie addsl.. [/B]
Achso, ne ich meine natürlich mysql_real_escape_string ^^ (ich hab die Funktion irgendwann mal abgekürzt, damit ich nicht soviel tippen brauch :D ) und diese Funktion maskiert die Zeichen zwar auch, die werden dann aber trotzdem unmaskiert in die Datenbank geschrieben und DAS ist der Unterschied zu addslashes.
Den Inhalt von mysql_real_escape_string kannst du so ausgeben, bei addslashes musst du vor der Ausgabe nochmal stripslashes verwenden...
Hallo
einen halben Erfolg habe ich nun, es sind keine fehler mehr da und es wird jede Mail einmal per $sql ausgelsen :).
Nun aber zum anderen.
Bei sql habe ich jetzt ja noch diese Durcheinandere wie bekomme ich das weg? Dies hat sich vielleicht schon mit der nächsten frage erübrigt. Wie soll den jetzt der Eintrag in die Datenbank vorgenommen werden, wenn ich die Zeilen Empfaenger, Absender, Betreff, Body(Text),Anhang,mailserver_id und server_id habe
Ich habe den unteren Fehler so gelöst
mysql_query("insert into mails (mailserver_id,server_id,header,body) values ('1','2','3','4')" ) or die(mysql_error());
Und so nebenbei. Was soll diese Code machen?
Wenn ichs richtig verstanden habe sieht er nach welche Mails isnd da Speichert sie in die Datenbank und fertig ist das so?
Edit:
Die letzte Frage könnt ihr vergessen
Original geschrieben von TBT
die Mails von einem POP3 Server abholen, und dann eine SQL Abfrage zusammenzubauen,
um das Ganze in einer DB zu speichern.
ghostgambler 11-01-2005, 17:59 Original geschrieben von themonk
Bei sql habe ich jetzt ja noch diese Durcheinandere wie bekomme ich das weg? Dies hat sich vielleicht schon mit der nächsten frage erübrigt. Wie soll den jetzt der Eintrag in die Datenbank vorgenommen werden, wenn ich die Zeilen Empfaenger, Absender, Betreff, Body(Text),Anhang,mailserver_id und server_id habe
Ich habe den unteren Fehler so gelöst
mysql_query("insert into mails (mailserver_id,server_id,header,body) values ('1','2','3','4')" ) or die(mysql_error());
Also, der komplette Header wird in Header gespeichert, extrahiert wird später. Mit dem Body das Selbe, der Anhang ist im Body mit drin, die mailserver_id, ist bei dir doch hinfällig, weil du nur ein Postfach nutzt, oder? (Da steht normalerweise eine ID drin, um in einer anderen Tabelle nachzugucken, zu welchen Postfach die Mail gehört!) und die Server_Id wird auch eingetragen und damit hast du dann doch deine Struktur, oder nicht?
und die Server_Id wird auch eingetragen und damit hast du dann doch deine Struktur, oder nicht?
Ja? Wo wird den die Server_Id eingetragen?
also Body ist $b und header ist $h und mailserver_id kann ich raus lassen
Nun muss ich nur noch das ganze Zerteilen den so wieder der Header jetzt aussieht kann man den ja kaum entziffern.
So irgendwie?
preg_match('#Subject: (.*)#i',$h,$subject);
preg_match('#From: (.*)#i',$h,$from);
Da wird bei mir nichts angezeigt
ghostgambler 11-01-2005, 18:26 Original geschrieben von themonk
Ja? Wo wird den die Server_Id eingetragen?
In der Datenbank? Oder meinst du in welcher Variablen?
Also in dem Beispiel von TBT da:
$server[$i][0]
Nun muss ich nur noch das ganze Zerteilen den so wieder der Header jetzt aussieht kann man den ja kaum entziffern
Wie sieht der denn aus???
Hallo,
wenn ich jetzt $row ausgebe kommt da 0 kann das sein?
$row = "(" . $server[$i][0] . ")";
Der header ishet jetzt so aus
Return-Path: X-Original-To: mail@mail.de Delivered-To: web123p1@ipx10799.ipxserver.de Received: from mail.gmx.net (pop.gmx.de [217.165.64.20]) by ipx10799.ipxserver.de (Postfix) with SMTP id CF445354102 for ; Tue, 11 Jan 2005 14:08:31 +0100 (CET) Received: (qmail 26915 invoked by uid 0); 11 Jan 2005 13:08:25 -0000 Received: from 217.228.56.61 by www74.gmx.net with HTTP; Tue, 11 Jan 2005 14:08:25 +0100 (MET) Date: Tue, 11 Jan 2005 14:08:25 +0100 (MET) From: \"name des senders\" To:mail@mail.de MIME-Version: 1.0 Subject: 123 X-Priority: 3 (Normal) X-Authenticated: #9752341 Message-ID: <18603.1105448905@www74.gmx.net> X-Mailer: WWW-Mail 1.6 (Global Message Exchange) X-Flags: 0001 Content-Type: text/plain; charset=\"us-ascii\" Content-Transfer-Encoding: 7bit X-UIDL: Af6!!UmJ!!Ik9!!`^i\"! Status: RO
ghostgambler 11-01-2005, 19:22 Original geschrieben von themonk
Hallo,
wenn ich jetzt $row ausgebe kommt da 0 kann das sein?
$row = "(" . $server[$i][0] . ")";
jep, das kann sein, das ist die Variable, die du ignorieren solltest *drop*
Ich meinte die hier: $ids[$ii], sorry ^_^"
Der header ishet jetzt so aus
Lass mal vor der Ausgabe den Text durch die Funktion nl2br jagen und poste die Ausgabe dann nochmal.
Hallo
Bei $row = "('" . $ids[$ii] . "')";
kommen 2 Zahlen sicher sind das nun die richtigen da ich ja auch 2 Mails habe die Zahlen sehen so aus 1090 ,1099
Lass mal vor der Ausgabe den Text durch die Funktion nl2br jagen und poste die Ausgabe dann nochmal.
Return-Path:
X-Original-To: mail@mail.de
Delivered-To: web123p1@ipx10799.ipxserver.de
Received: from mail.gmx.net (pop.gmx.de [217.165.64.20])
by ipx10799.ipxserver.de (Postfix) with SMTP id CF445354102
for ; Tue, 11 Jan 2005 14:08:31 +0100 (CET)
Received: (qmail 26915 invoked by uid 0); 11 Jan 2005 13:08:25 -0000
Received: from 219.228.56.61 by www74.gmx.net with HTTP;
Tue, 11 Jan 2005 14:08:25 +0100 (MET)
Date: Tue, 11 Jan 2005 14:08:25 +0100 (MET)
From: \"name\"
To: mail@mail.de
MIME-Version: 1.0
Subject: 123
X-Priority: 3 (Normal)
X-Authenticated: #9752341
Message-ID: <18603.1105448905@www74.gmx.net>
X-Mailer: WWW-Mail 1.6 (Global Message Exchange)
X-Flags: 0001
Content-Type: text/plain; charset=\"us-ascii\"
Content-Transfer-Encoding: 7bit
X-UIDL: Af6!!UmJ!!Ik9!!`^i\"!
Status: RO
Jetzt sieht das ganze schon geordneter aus nur solche dinge wie X-Authenticated: #9752341 brauche ich doch garnicht
penizillin 12-01-2005, 14:26 kommen 2 Zahlen sicher sind das nun die richtigen da ich ja auch 2 Mails habe die Zahlen sehen so aus 1090 ,1099 denkst du eigentlich genau so, wie du schreibst?
ghostgambler 12-01-2005, 14:28 Original geschrieben von themonk
Hallo
Bei $row = "('" . $ids[$ii] . "')";
kommen 2 Zahlen sicher sind das nun die richtigen da ich ja auch 2 Mails habe die Zahlen sehen so aus 1090 ,1099
Das müssten sie dann sein, sind zwar irgendwie ziemlich kurz, aber egal...kannst ja mal noch ne Testmail schicken und dann die Zahl davon mal posten.
Jetzt sieht das ganze schon geordneter aus nur solche dinge wie X-Authenticated: #9752341 brauche ich doch garnicht [/B]
Das stört aber alles nicht.
Du speicherst den Header so in der Datenbank. Die Funktion nl2br wandelt nämlich alle Whitespace-Umbruche in ein <br /> um, d.h. da sind auch ohne die Funktion schon Umbrüche, nur die sieht man bei der Ausgabe nicht (im HTML-Code der Seite müssten sie jedoch wieder zu finden sein!)
Wenn du dann später die Mails anzeigen willst, hast du ja die kompletten Daten der Mail, also auch den Header. Und dann verwendest du die preg_match, siehe viel weiter vorne im Thread, wo ich damit gezeigt hatte, wie man das Subject extrahieren kann, um die Sachen zu finden, die du haben möchtest.
Außerdem kannst du damit dann auch auf den MIME-Header prüfen und ggf. den Body der Mail anders behandeln, siehe auch weiter oben.
ghostgambler 12-01-2005, 14:30 Original geschrieben von penizillin
denkst du eigentlich genau so, wie du schreibst?
Dazu fällt mir ganz spontan das ein :D
http://www.lugbz.org/documents/smart-questions_de.html#writewell
(Okay, so spontan nicht, ich hab's gestern mal wieder gelesen...)
Hallo,
habe nun die Mail Zerlegt.
preg_match('#From: (.*)#i',$text ,$From);
echo "<br><br>";
echo "$From[0]";
Da wird jetzt "From: Name" angezeigt.
Das ist auch gut so nur jetzt habe ich da den Namen, jetzt fehlt mir die E-Mail adresse von dem Absender.
Und dann nochetwas. Ich habe versucht den Namen vor dem @ raus zu filtern nur das funktioniert nicht.
ghostgambler 12-01-2005, 16:29 Original geschrieben von themonk
Hallo,
habe nun die Mail Zerlegt.
preg_match('#From: (.*)#i',$text ,$From);
echo "<br><br>";
echo "$From[0]";
Da wird jetzt "From: Name" angezeigt.
Aber das ist nicht dass, was du extrahieren solltest...wieso verwendest du nicht das, was ich schon gepostet hatte???
// Für das Subject
$pattern = "#Subject: (.+)\r\n#U";
preg_match($pattern, $header_der_mail, $matches);
echo '<pre>' . print_r($matches, true) . '</pre>';
In $matches[1] sollte dann nur das sein, was dahinter steht, ohne Umbruch usw. dein Pattern sieht mir etwas....zusammengewürfelt aus..., den Modifier i kannst du ja noch anhängen, zur Not kannst du auch noch das + in einen * umwandeln, aber grade das wichtige (\n\r als Ende) solltest du drin lassen!
Das ist auch gut so nur jetzt habe ich da den Namen, jetzt fehlt mir die E-Mail adresse von dem Absender.
Und dann nochetwas. Ich habe versucht den Namen vor dem @ raus zu filtern nur das funktioniert nicht.
Wie hast du die Mail verschickt?
ist das den ein so großer unterschied?
Bei mir wird bei beiden das gleiche ausgegeben ausser das deins Optisch anders ist.
Array
(
[0] => Subject: Testbild
[1] => Testbild
)
Die Mail habe ich ganz normal von gmx geschickt.
Dort kann man einstellen, ob man nur die E-Mail Adresse mit schickt oder auch den Namen und ich habe E-Mail+Namen und jetzt wird bei mir nur der Name angezeigt.
Ich habe nun noch mal wo ich ja den Header fast fertig habe mir das mit Mime angeschaut.
Nur jetzt komme ich nicht weiter habe mir schon deinen Beitrag von Seite 3 Angeschaut nur es geht nichts.
Also ich schaue nach ob im Header "Content-Type: multipart/mixed" steht.
Du hast ja gesagt das ich nach der Mime Version suchen soll. Aber bei einer normalen Mail ohne anhang steht im Header auch Version 1.0
Also habe ich jetzt nach Content-Type gesucht wenn diese drin ist fängt mein das Script an, wenn nicht bleibt es bei der normalen ausgabe.
$texta = explode ("--", $textb);
echo $texta;
da kommt nichts $textb ist der Body.
Noch einen frage mein Body sieht jetzt ja 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.
--========GMXBoundary257941105531975 #1
Content-Type: text/plain; charset=\"us-ascii\"
Content-Transfer-Encoding: 7bit
Textmit bild
+++ Sparen Sie mit GMX DSL +++ http://www.gmx.net/de/go/dsl
AKTION für Wechsler: DSL-Tarife ab 3,99 EUR/Monat + Startguthaben
--========GMXBoundary257941105531975 #2
Content-Type: image/x-png; name=\"banner.png\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"banner.png\"
iVBORw0KGgoAAAANSUhEUgAAAbcAAACjCAIAAACGxceFAAAABnRSTlMAfwB
Muss ich jetzt ab dem 2ten Boundary anfangen zu endcoden? und alles was da drüber ist kann ich ignorieren?
Hallo
kann mir den jetzt keiner weiterhelfen?
Beim selben Problem war ich mit imap auch und konnte es nicht lösen
http://www.php-resource.de/forum/showthread.php?s=&threadid=49276
ghostgambler 14-01-2005, 21:47 Original geschrieben von themonk
ist das den ein so großer unterschied?
Bei mir wird bei beiden das gleiche ausgegeben ausser das deins Optisch anders ist.
Mit meiner Möglichkeit, kannst du davor aber schreiben, was du willst ^^
Die Mail habe ich ganz normal von gmx geschickt.
Dort kann man einstellen, ob man nur die E-Mail Adresse mit schickt oder auch den Namen und ich habe E-Mail+Namen und jetzt wird bei mir nur der Name angezeigt.[QUOTE]
Das kann aber nicht sein...steht dem im Mailheader beim From deine Adresse??? Wenn ja, mach mal auf die Ausgabe des Froms htmlentities() (http://www.php.net/htmlentities)
[QUOTE]Ich habe nun noch mal wo ich ja den Header fast fertig habe mir das mit Mime angeschaut.
Nur jetzt komme ich nicht weiter habe mir schon deinen Beitrag von Seite 3 Angeschaut nur es geht nichts.
Also ich schaue nach ob im Header "Content-Type: multipart/mixed" steht.
Du hast ja gesagt das ich nach der Mime Version suchen soll. Aber bei einer normalen Mail ohne anhang steht im Header auch Version 1.0
Also habe ich jetzt nach Content-Type gesucht wenn diese drin ist fängt mein das Script an, wenn nicht bleibt es bei der normalen ausgabe.
$texta = explode ("--", $textb);
echo $texta;
da kommt nichts $textb ist der Body.
Noch einen frage mein Body sieht jetzt ja so aus
Muss ich jetzt ab dem 2ten Boundary anfangen zu endcoden? und alles was da drüber ist kann ich ignorieren?
Hat sich das jetzt mit der Klasse von TBT erledigt?
Wenn ja, mach mal auf die Ausgabe des Froms htmlentities()
Mit htmlentities() steht jetzt auch die E-Mail adresse da.
Hat sich das jetzt mit der Klasse von TBT erledigt?
Naja habe jetzt ne Frage zu dem Code soll ich die hier stellen oder in den Beitrag von TBT?
Stelle ich sie erstmal hier.
Die class habe ich als maildecoder2.class.php gespeichert und in mail.php includet. In der class darf ich sicherlich nichts ändern oder?
Nur jetzt muss ich ja in der mail.php sicher noch irgendwas machen damit die class auch gebraucht wird.
Deshalb habe ich jetzt erstmal das hier dort rein geschrieben.
$mheader = "$text";
$mbody = "$textb";
$Decoder = new MailDecoder( $mheader, $mbody); ist das richtig?
Original geschrieben von themonk
Deshalb habe ich jetzt erstmal das hier dort rein geschrieben.
$mheader = "$text";
$mbody = "$textb";
$Decoder = new MailDecoder( $mheader, $mbody); ist das richtig?
dann schau doch mal in die Klasse, ganz unten ist als Kommentar sogar drin
wie du sie zu benutzen hast
Original geschrieben von TBT
dann schau doch mal in die Klasse, ganz unten ist als Kommentar sogar drin
wie du sie zu benutzen hast
da steht
/*
$mail = implode( '', file( '/home/sven/1099418313.27325.3VQSq:2,S' ) );
$tmp = & new MailDecoder();
$answer = $tmp->decode( $mail );
echo "<pre>";
print_r( $answer );*/
ich neheme an das dann diese in mail.php gehört oder?
$mail = implode( '', file( 'maildecoder2.class.php' ) );
$Decoder = & new MailDecoder();
$answer = $Decoder->decode( $mail );
echo "<pre>";
print_r( $answer );
aber woher weißt der code den nun was der Header und der body ist also kann das doch auch nicht richtig sein
Original geschrieben von themonk
ich neheme an das dann diese in mail.php gehört oder?
$mail = implode( '', file( 'maildecoder2.class.php' ) );
$Decoder = & new MailDecoder();
$answer = $Decoder->decode( $mail );
echo "<pre>";
print_r( $answer );
aber woher weißt der code den nun was der Header und der body ist also kann das doch auch nicht richtig sein
$mail ist die als textdatei gespeicherte Email, welche von der POP3 Klasse geliefert wurde.
$mail wird wohl wahrscheinlich der INHALT der Mail sein!
also
includiere klasse ...
lade $email ...
erzeuge decoder
$answer = decoder->decode( $email );
kontrollausgabe von $answer, damit du siehst, wo was ist!
Original geschrieben von TBT
$mail ist die als textdatei gespeicherte Email, welche von der POP3 Klasse geliefert wurde.
$mail wird wohl wahrscheinlich der INHALT der Mail sein!
also
includiere klasse ...
lade $email ...
erzeuge decoder
$answer = decoder->decode( $email );
kontrollausgabe von $answer, damit du siehst, wo was ist!
Ich glaube ich bin zu Dumm dazu.
Wo steht den das in $mail die als textdatei gespeicherte Email ist?
$mail = implode( '', file( 'maildecoder2.class.php' ) );
$tmp = & new MailDecoder();
$answer = $tmp->decode( $mail );
echo "<pre>";
print_r( $answer );
genau das habe ich in mail.php stehen und es kommt der Fehler
Fatal error: Cannot instantiate non-existent class: maildecoder in /srv/www/htdocs/.../mail.php on line 117
das steht da
$mail = implode( '', file( '/home/sven/1099418313.27325.3VQSq:2,S' ) );
du kannst aber auch direkt den String, denn dir die pop3 Klasse gibt als mail nehmen
Original geschrieben von TBT
das steht da
$mail = implode( '', file( '/home/sven/1099418313.27325.3VQSq:2,S' ) );
du kannst aber auch direkt den String, denn dir die pop3 Klasse gibt als mail nehmen
Diese Zahlen haben mich auch gewunder.
Meinst du mit dem String $sql den dort ist der Header und der Body drin.
Aber das kann ja auch nicht, denn wenn ich das dann so mache
$answer = $tmp->decode( $sql ); dann wird nichst mehr gezeigt.
nein, ich meine nicht das $sql sondern die Mail,
also
$mail = $header."\n\n".$body;
habe jetzt
$mail = $h."\n\n".$b;
$tmp = & new MailDecoder();
$answer = $tmp->decode( $mail );
echo "<pre>";
print_r( $answer );
$h und $b werden ja oben angegeben
$b .= mysql_real_escape_string ( $body[$line] ) . "\r\n";
gemacht und als Antwort kommt:
Array
(
[header] => Array
(
)
[body] => Array
(
)
)
zeig mal deinen ganzen Code, was machst du eingentlich mit mysql_escape ... wenn du die Mails decodieren willst?
<?
mysql_connect("localhost",
"user","pw") or die
("Keine Verbindung moeglich");
mysql_select_db("db") or die
("Die Datenbank existiert nicht");
include 'pop3.class.php';
include 'maildecoder2.class.php';
$server = "localhost";
$port = 110;
$user = "user";
$pass = "pw";
$pop3 = new POP3( $server, $port, $user, $pass );
if ( !$pop3error = $pop3->open() ) {
if ( !$pop3error = $pop3->login() ) {
if ( !$pop3error = $pop3->stat() ) {
$mail_sizes = $pop3->listing();
$ids = $pop3->ids();
$row = "";
for( $ii = 1;$ii <= count( $mail_sizes );++$ii ) {
$result = mysql_query('SELECT server_id FROM mails');
$alreadyhave = array();
while ($row = mysql_fetch_assoc($result))
{
$alreadyhave[] = $row['server_id'];
}
if ( in_array( $ids[$ii], $alreadyhave ) ) { // alreadyhave ist ein Array mit Mailids
continue; // welche nicht nochmal vom Server geholt werden
}
$headers = $body = $h = $b = "";
if ( ( $pop3error = $pop3->retrieve( $ii, $headers, $body ) ) == "" ) {
for( $line = 0;$line < count( $headers );$line++ ) {
$h .= mysql_real_escape_string ( $headers[$line] ) . "\r\n";
}
for( $line = 0;$line < count( $body );$line++ ) {
$b .= mysql_real_escape_string ( $body[$line] ) . "\r\n";
}
$row1 = " $ids[$ii] ";
$row = "('" . $ids[$ii] . "'," . $server[$i][0] . ",'$h','$b')";
}
$sql .= ( $sql?",":"" ) . $row;
} }
}
}
if ( $pop3error ) {
echo $pop3error;
}
$pop3->disconnect();
$mail = $header."\n\n".$body;
$tmp = & new MailDecoder();
$answer = $tmp->decode( $mail );
echo "<pre>";
print_r( $answer );
?>
beschränke die bitte auf das abholen einer mail, und nicht mehrerer,
oder decodiere innerhalb der Schleife.
Dann übergib dem Decoder header und body ( jeweils per implode)
also sowas in der Art
for( $i=1; $i<=$count && $i<=$_max; ++$i ){
$headers = $body = '';
if( $error = $pop3->retrieve( $i, $headers, $body ) ){
continue;
}
$headers = implode("\n",$headers);
$body = implode("\n",$body);
$mail = $headers."\n\n".$body;
$decoder = new MimeDecoder();
$tmp = $decoder->decode( $mail );
print_r( $tmp );
}
$pop3->disconnect();
ich glaub ich schaffe es nie!
Habe jetzt mal eine Version von dennne die ich ausprobiert habe hier:
if ( in_array( $ids[$ii], $alreadyhave ) ) { // alreadyhave ist ein Array mit Mailids
continue; // welche nicht nochmal vom Server geholt werden
}
$headers = $body = $h = $b = "";
if ( ( $pop3error = $pop3->retrieve( $ii, $headers, $body ) ) == "" ) {
for( $line = 0;$line < count( $headers );$line++ ) {
$h .= mysql_real_escape_string ( $headers[$line] ) . "\r\n";
}
for( $line = 0;$line < count( $body );$line++ ) {
$b .= mysql_real_escape_string ( $body[$line] ) . "\r\n";
}
$row1 = " $ids[$ii] ";
$row = "('" . $ids[$ii] . "'," . $server[$i][0] . ",'$h','$b')";
}
$sql .= ( $sql?",":"" ) . $row;
} }
}
$headers = implode("\n",$headers);
$body = implode("\n",$body);
$mail = $headers."\n\n".$body;
$decoder = new MimeDecoder();
$tmp = $decoder->decode( $mail );
print_r( $tmp );
}
if ( $pop3error ) {
echo $pop3error;
}
$pop3->disconnect();
Und das ist der FehlerFatal error: Cannot instantiate non-existent class: mimedecoder in /srv/www/htdocs/.../mail.php on line 60
leider nicht
include 'maildecoder2.class.php';
anscheinend ja doch,
Fatal error: Cannot instantiate non-existent class: mimedecoder in /srv/www/htdocs/.../mail.php on line 60
oder hast du die Klasse umbenannt
Es lag an der Klasse es ist nicht mimedecoder sondern MailDecoder.
Nun wird mir das angezeigt
Array ( [header] => Array ( ) [body] => Array ( ) )
zeig mal deinen aktuellen Code
Mein Code:
(Verbindungen)
.
$pop3 = new POP3( $server, $port, $user, $pass );
if ( !$pop3error = $pop3->open() ) {
if ( !$pop3error = $pop3->login() ) {
if ( !$pop3error = $pop3->stat() ) {
$mail_sizes = $pop3->listing();
$ids = $pop3->ids();
$row = "";
for( $ii = 1;$ii <= count( $mail_sizes );++$ii ) {
$result = mysql_query('SELECT server_id FROM mails');
$alreadyhave = array();
while ($row = mysql_fetch_assoc($result))
{
$alreadyhave[] = $row['server_id'];
}
if ( in_array( $ids[$ii], $alreadyhave ) ) { // alreadyhave ist ein Array mit Mailids
continue; // welche nicht nochmal vom Server geholt werden
}
$headers = $body = $h = $b = "";
if ( ( $pop3error = $pop3->retrieve( $ii, $headers, $body ) ) == "" ) {
for( $line = 0;$line < count( $headers );$line++ ) {
$h .= mysql_real_escape_string ( $headers[$line] ) . "\r\n";
}
for( $line = 0;$line < count( $body );$line++ ) {
$b .= mysql_real_escape_string ( $body[$line] ) . "\r\n";
}
$row1 = " $ids[$ii] ";
$row = "('" . $ids[$ii] . "'," . $server[$i][0] . ",'$h','$b')";
}
$sql .= ( $sql?",":"" ) . $row;
} }
}
$headers = implode("\n",$headers);
$body = implode("\n",$body);
$mail = $headers."\n\n".$body;
$decoder = new MailDecoder();
$tmp = $decoder->decode( $mail );
print_r( $tmp );
}
if ( $pop3error ) {
echo $pop3error;
}
$pop3->disconnect();
echo $headers; ## Zum Testen ob headers was ausgibt##
?>
was sagt denn $pop3error ?
ist in $header und $body auch was drin?
$pop3error sagt nichts.
echo $headers;
echo "<br><br>";
echo $body;
wird bei beiden was angezeigt.
Original geschrieben von themonk
echo $headers;
echo "<br><br>";
echo $body;
wird bei beiden was angezeigt.
und was ?
das ist unten zur Kontrolle, ob im Header und Body was drin ist
WAS wird angezeigt, wie sieht denn die Ausgabe aus?
Array ( [header] => Array ( ) [body] => Array ( ) ) (das sagt $tmp)
Return-Path:
X-Original-To:mail@mail.de
Delivered-To: user@ipx10799.ipxserver.de
Received: from mail.gmx.net (pop.gmx.de [213.175.64.20])
by ipx10799.ipxserver.de (Postfix) with SMTP id E07CA354102
for ; Wed, 12 Jan 2005 13:13:02 +0100 (CET)
Received: (qmail 26021 invoked by uid 0); 12 Jan 2005 12:12:55 -0000
Received: from 217.777.56.61 by www70.gmx.net with HTTP;
Wed, 12 Jan 2005 13:12:55 +0100 (MET)
Date: Wed, 12 Jan 2005 13:12:55 +0100 (MET)
From: "absender"
To: mail@mail.de
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="========GMXBoundary257941105531975"
Subject: Testbild
X-Priority: 3 (Normal)
X-Authenticated: #9752341
Message-ID: <25794.1105531975@www70.gmx.net>
X-Mailer: WWW-Mail 1.6 (Global Message Exchange)
X-Flags: 0001
X-UIDL: @a[!!GI=!!JVb!!Lk~"!
Status: RO (das sagt $headers)
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.
--========GMXBoundary257941105531975
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Textmit bild
+++ Sparen Sie mit
--========GMXBoundary257941105531975
Content-Type: image/x-png; name="banner.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="banner.png"
iVBORw0KGgoAAAANSUhEUgAAAbcAAACjCAIAAACGxceFAAAABnRSTlMAfwB+AH1l/zhUAAAABmJL (das sagt $body)
wo sind die Zeilenumbrüche, die in die Mail gehören?
bei mir sehen dir immer so aus
Return-Path: <wwwrun@niclas.ebiz-webhosting.de>
X-Flags: 0000
Delivered-To: GMX delivery to tbt1@gmx.de
Received: (qmail invoked by alias); 14 Jan 2005 14:45:32 -0000
Received: from niclas.ebiz-webhosting.de (EHLO niclas.ebiz-webhosting.de) (213.203.248.134)
by mx0.gmx.net (mx045) with SMTP; 14 Jan 2005 15:45:32 +0100
Received: by niclas.ebiz-webhosting.de (niclas.ebiz-webhosting.de, from userid 33)
id B10C477804B; Fri, 14 Jan 2005 15:45:37 +0100 (CET)
To: tbt1@gmx.de
Subject: Antwort auf den Beitrag 'Knobelaufgabe ?'
From: "PHP script resource Mailer" <webmaster@it-development.de>
Message-Id: <20050114144537.B10C477804B@niclas.ebiz-webhosting.de>
Date: Fri, 14 Jan 2005 15:45:37 +0100 (CET)
X-GMX-Antivirus: -1 (not scanned, may not use virus scanner)
X-GMX-Antispam: -2 (not scanned, spam filter disabled)
X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=0.93.3.1
int cnt prob spamicity histogram
0.00 58 0.013961 0.012796 ################################################
0.10 5 0.112869 0.021686 #####
0.20 0 0.000000 0.021686
0.30 0 0.000000 0.021686
0.40 0 0.000000 0.021686
0.50 0 0.000000 0.021686
0.60 0 0.000000 0.021686
0.70 0 0.000000 0.021686
0.80 0 0.000000 0.021686
0.90 1 0.938503 0.060081 #
X-UID:
Status: R
X-Status: NC
X-KMail-EncryptionState:
X-KMail-SignatureState:
X-KMail-MDN-Sent:
Hallo TBT,
...
und natürlich die eventuellen Boundarys,
und so möchte der decoder sie haben
habe jetzt das obere Editiert
und mein Code iseht unten so aus
$headers = nl2br( $headers );
$body = nl2br( $body);
$headers = implode("\n",$headers);
$body = implode("\n",$body);
$mail = $headers."\n\n".$body;
$decoder = new MailDecoder();
$tmp = $decoder->decode( $mail );
print_r( $tmp );
Fehler
Warning: implode(): Bad arguments. in /srv/www/htdocs/.../mail.php on line 62
wieso nl2br?
und welche ist zeile 62?
ghostgambler 16-01-2005, 11:57 Original geschrieben von themonk
$body = nl2br( $body);
Die Funktion hatte ich dir nur für die Ausgabe genannt :rolleyes:
Diese Funktion wandelt Zeilenumbrüche mit ASCII-Zeichen in HTML-Umbrüche um, die will aber die Klasse von TBT noch nicht haben, d.h. du übergibst den Header mit den \r\n dadrin und ohne vorher nl2br() rüberlaufen zu lassen!
und welche ist zeile 62?
$headers = implode("\n",$h);
du übergibst den Header mit den \r\n dadrin und ohne vorher nl2br() rüberlaufen zu lassen
Das sollte dann doch so aussehen
$h .= ( $headers[$line] ) . "\r\n";
aber es kommt immer onch der selbe Fehler
wenn du mit
$h .= ( $headers[$line] ) . "\r\n";
arbeitest, ahst du doch schon einen String, und brauchst kein implode mehr!
Wenn du dies mit dem Body auch so gemacht hast, ist $mail logischerweise dann
$mail = $h."\r\n".$b;
Das ist mein Code
...
if ( in_array( $ids[$ii], $alreadyhave ) ) { // alreadyhave ist ein Array mit Mailids
continue; // welche nicht nochmal vom Server geholt werden
}
$headers = $body = $h = $b = "";
if ( ( $pop3error = $pop3->retrieve( $ii, $headers, $body ) ) == "" ) {
for( $line = 0;$line < count( $headers );$line++ ) {
$h .= ( $headers[$line] ) . "\r\n";
}
for( $line = 0;$line < count( $body );$line++ ) {
$b .= ( $body[$line] ) . "\r\n";
}
$row1 = " $ids[$ii] ";
$row = "('" . $ids[$ii] . "'," . $server[$i][0] . ",'$h','$b')";
}
$sql .= ( $sql?",":"" ) . $row;
} }
}
$mail = $h."\r\n".$b;
$decoder = new MailDecoder();
$tmp = $decoder->decode( $mail );
print_r( $tmp );
}
if ( $pop3error ) {
echo $pop3error;
}
$pop3->disconnect();
Was dabei raus kommt ist nichts
Original geschrieben von themonk
Das ist mein Code
...
Was dabei raus kommt ist nichts
welchen du erstmal so reduzieren kannst ... ($sql wurde rausgenommen, da erstmal das decodieren wichtig ist)
// ...
{
if ( in_array( $ids[$ii], $alreadyhave ) ) { // alreadyhave ist ein Array mit Mailids
continue; // welche nicht nochmal vom Server geholt werden
}
// mail abholen
$headers = $body = "";
if ( ( $pop3error = $pop3->retrieve( $ii, $headers, $body ) ) != "" ) {
// fehler aufgetreten
echo $pop3error;
die();
}
// mail decodieren
$decoder = new MailDecoder();
$tmp = $decoder->decode( implode("\n",$headers)."\n\n".implode("\n",$body) );
// kontrollausgabe
print_r( $tmp );
}
$pop3->disconnect();
so habe den code jetzt eingefügt aber jetzt kommt wieder
Array ( [header] => Array ( ) [body] => Array ( ) )
dann muß es was anderes sein,
ich habe gerade deine obige Mail als Datei gespeichert
Return-Path:
X-Original-To:mail@mail.de
Delivered-To: user@ipx10799.ipxserver.de
Received: from mail.gmx.net (pop.gmx.de [213.175.64.20])
by ipx10799.ipxserver.de (Postfix) with SMTP id E07CA354102
for ; Wed, 12 Jan 2005 13:13:02 +0100 (CET)
Received: (qmail 26021 invoked by uid 0); 12 Jan 2005 12:12:55 -0000
Received: from 217.777.56.61 by www70.gmx.net with HTTP;
Wed, 12 Jan 2005 13:12:55 +0100 (MET)
Date: Wed, 12 Jan 2005 13:12:55 +0100 (MET)
From: "absender"
To: mail@mail.de
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="========GMXBoundary257941105531975"
Subject: Testbild
X-Priority: 3 (Normal)
X-Authenticated: #9752341
Message-ID: <25794.1105531975@www70.gmx.net>
X-Mailer: WWW-Mail 1.6 (Global Message Exchange)
X-Flags: 0001
X-UIDL: @a[!!GI=!!JVb!!Lk~"!
Status: RO (das sagt $headers)
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.
--========GMXBoundary257941105531975
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Textmit bild
+++ Sparen Sie mit
--========GMXBoundary257941105531975
Content-Type: image/x-png; name="banner.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="banner.png"
iVBORw0KGgoAAAANSUhEUgAAAbcAAACjCAIAAACGxceFAAAABnRSTlMAfwB+AH1l/zhUAAAABmJL
--========GMXBoundary257941105531975
und durch den decoder gejagt erhalte ich
Array
(
[header] => Array
(
[Delivered-To] => user@ipx10799.ipxserver.de
[Received] => from 217.777.56.61 by www70.gmx.net with HTTP; Wed, 12 Jan 2005 13:12:55 +0100 (MET)
[Date] => Wed, 12 Jan 2005 13:12:55 +0100 (MET)
[From] => "absender"
[To] => mail@mail.de
[MIME-Version] => 1.0
[Content-Type] => multipart/mixed; boundary="========GMXBoundary257941105531975"
[Subject] => Testbild
[X-Priority] => 3 (Normal)
[X-Authenticated] => #9752341
[Message-ID] => <25794.1105531975@www70.gmx.net>
[X-Mailer] => WWW-Mail 1.6 (Global Message Exchange)
[X-Flags] => 0001
[X-UIDL] => @a[!!GI=!!JVb!!Lk~"!
[Status] => RO (das sagt $headers)
)
[body] => Array
(
[0] => Array
(
[header] => Array
(
)
[body] => Array
(
)
)
[1] => Array
(
[header] => Array
(
[Content-Type] => text/plain; charset="us-ascii"
[Content-Transfer-Encoding] => 7bit
)
[body] => Textmit bild
+++ Sparen Sie mit
)
[2] => Array
(
[header] => Array
(
[Content-Type] => image/x-png; name="banner.png"
[Content-Transfer-Encoding] => base64
[Content-Disposition] => attachment; filename="banner.png"
)
[body] => ‰PNG
)
)
)
es geht also, anscheinend hat er aber noch Probleme mit dem
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.
ohne Mime Auszeichnung
Original geschrieben von TBT
anscheinend hat er aber noch Probleme mit dem
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.
ohne Mime Auszeichnung
Klasse korrigiert, dies geht nun auch
dies geht nun auch
Ja jetzt wird bei Body der body angezeigt :(
Array ( [header] => Array ( ) [body] => 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. --========GMXBoundary257941105531975 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Textmit bild -- +++ Sparen Sie mit GMX DSL +++ http://www.gmx.net/de/go/dsl AKTION f?echsler: DSL-Tarife ab 3,99 EUR/Monat + Startguthaben --========GMXBoundary257941105531975 Content-Type: image/x-png; name="banner.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="banner.png" iVBORw0KGgoAAAANSUhEUgAAAbcAAACjCAIAAACGxceFAAAABnRSTlMAfwB+AH1l/zhUAAAABmJL
Und das ist der Code
$pop3 = new POP3( $server, $port, $user, $pass );
if ( !$pop3error = $pop3->open() ) {
if ( !$pop3error = $pop3->login() ) {
if ( !$pop3error = $pop3->stat() ) {
$mail_sizes = $pop3->listing();
$ids = $pop3->ids();
$row = "";
for( $ii = 1;$ii <= count( $mail_sizes );++$ii ) {
$result = mysql_query('SELECT server_id FROM mails');
$alreadyhave = array();
while ($row = mysql_fetch_assoc($result))
{
$alreadyhave[] = $row['server_id'];
}
{
if ( in_array( $ids[$ii], $alreadyhave ) ) { // alreadyhave ist ein Array mit Mailids
continue; // welche nicht nochmal vom Server geholt werden
}
// mail abholen
$headers = $body = "";
if ( ( $pop3error = $pop3->retrieve( $ii, $headers, $body ) ) != "" ) {
// fehler aufgetreten
echo $pop3error;
die();
}
}
}
}
}
// mail decodieren
$decoder = new MailDecoder();
$tmp = $decoder->decode( implode("\n",$headers)."\n\n".implode("\n",$body) );
// kontrollausgabe
print_r( $tmp );
}
$pop3->disconnect();
haut totzdem nicht hin, er zerlegt die Boundarys nicht :(
was hast du für ein Betriebssystem?
ghostgambler 16-01-2005, 22:24 Original geschrieben von TBT
haut totzdem nicht hin, er zerlegt die Boundarys nicht :(
wie auch, es ist ja kein Header da, der sagt, wo die Klasse trennen muss...
Oder hast du provisorisch einen reingesetzt in $headers?
was hast du für ein Betriebssystem?
Win 2000
Oder hast du provisorisch einen reingesetzt in $headers?
Meinst du damit jetzt TBT oder mich?
Ich habe nirgends etwas provisorisch reingesetzt
Hier könnt ihr mal selbst sehen
http://test.h-denkena.de/mail.php
Edit:
Bei
$c = ( implode("\n",$headers)."\n\n".implode("\n",$body)) ;
print $c;
wir sowohl der Header als auch der Body angezeigt
falls du dir mal deine Ausgabe im Quelltext anschaust, siehst du, dass der Header bei dir nach dem Body kommt.
hast du eventuell $header und $body vertauscht ;)
hast du eventuell $header und $body vertauscht
keinen Ahnung wo du meinst.
Ist das so falsch?
$tmp = $decoder->decode( implode("\n",$headers)."\n\n".implode("\n",$body) );
kann sein das du gerade geguckt hast als ich was ausprobiert habe. Jetzt ist alles so wie vorher
Hallo
ich habe jetzt schon vielles Probiert aber das was raus kommt sidn nur Fehler:(
Ich habe mir auch schon ne Mail von web geschickt nur das ändert nicht viel.
Wisst ihr denn auch nicht mehr weiter?
Hallo
ich versuch mit den Code Schnipseln von TBT seid 1 Monat E-Mail anhänge zu decodieren nur es Funktioniert nicht es wird nichts decodiert.
Die maildecoder2.class und pop3.class habe ich nicht verändert.
Die Index sieht so aus:
mysql_connect("localhost",
"user","pw") or die
("Keine Verbindung moeglich");
mysql_select_db("db") or die
("Die Datenbank existiert nicht");
include 'pop3.class.php';
include 'maildecoder2.class.php';
$server = "localhost";
$port = 110;
$user = "user";
$pass = "pw";
$pop3 = new POP3( $server, $port, $user, $pass );
if ( !$pop3error = $pop3->open() ) {
if ( !$pop3error = $pop3->login() ) {
if ( !$pop3error = $pop3->stat() ) {
$mail_sizes = $pop3->listing();
$ids = $pop3->ids();
$row = "";
for( $ii = 1;$ii <= count( $mail_sizes );++$ii ) {
$result = mysql_query('SELECT server_id FROM mails');
$alreadyhave = array();
while ($row = mysql_fetch_assoc($result))
{
$alreadyhave[] = $row['server_id'];
}
{
if ( in_array( $ids[$ii], $alreadyhave ) ) { // alreadyhave ist ein Array mit Mailids
continue; // welche nicht nochmal vom Server geholt werden
}
// mail abholen
$headers = $body = "";
if ( ( $pop3error = $pop3->retrieve( $ii, $headers, $body ) ) != "" ) {
// fehler aufgetreten
echo $pop3error;
die();
}
}
}
}
}
// mail decodieren
$decoder = new MailDecoder();
$tmp = $decoder->decode( implode("\n",$headers)."\n\n".implode("\n",$body) );
// kontrollausgabe
print_r( $tmp );
}
$pop3->disconnect();
echo "<br><br>";
print_r( $headers ); ## hier wird der Header zum Testen angezeigt
Hallo,
kannm ir den keiner bei mienem Problem weiter helfen?
Ich habe fast alles versucht nur es klappt nicht.
Original geschrieben von themonk
Ich habe fast alles versucht nur es klappt nicht.
dann versuch's mit dem rest noch :D
du lieferst hier keine ansätze, warum wunderst du dich, warum dir niemand hilft? :dontknow:
dann versuch's mit dem rest noch
Aber ich weiß nicht was das ist.
du lieferst hier keine ansätze, warum wunderst du dich, warum dir niemand hilft?
Die class Datein habe ich nicht verändert die index sieht so aus wie sie in meinem vorletzten Beitrag ist.
Und was ausgegeben ist ist das hier (http://test.h-denkena.de/mail.php)
Sind das genug Ansätze? Weitere weiß ich nicht, dass ist alles was ich darüber weiß.
Und nun?
du lieferst hier keine ansätze, warum wunderst du dich, warum dir niemand hilft?
sind das nicht genung ansätze oder wisst ihr auch nicht mehr weiter?
penizillin 21-02-2005, 16:51 was läuft denn nicht?
Original geschrieben von penizillin
was läuft denn nicht?
Das Decodieren der Mails.
die Mail wird zwar zerteilt so wie es ja auch erst sein soll. Nur dann geschieht nichtsmehr.Es wird nicht das Bild angezeigt sondern die Codierung.
Und was ausgegeben ist ist das ] hier (http://test.h-denkena.de/mail.php)
penizillin 23-02-2005, 16:04 ähm.. steht ganz oben nicht Content-Transfer-Encoding: base64?
Original geschrieben von penizillin
ähm.. steht ganz oben nicht ?
Ja das steht da wieso?
penizillin 24-02-2005, 17:46 wenn der inhalt doch ENkodiert ist, warum DEkodierst du ihn nicht?
jahlives 24-02-2005, 17:55 --STEFAN41ee57c82dd5 Content-Type: image/x-png; name="banner.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="banner.png" iVBORw0KGgoAAAANSUhEUgAAAbcAAACjCAIAAACGxceFAAAABnRSTlMAfwB+AH1l/zhUAAAA ...
Dein Problem scheint zu sein, dass auch wenn du decode anwendest, du das Bild nicht angezeigt bekommen wirst.
Du darfst NUR die Bilddaten an decode übergeben. Also musst du den Content-Type, den name,Transfer-Encoding,Content-Dispo und den filename rauskriegen.
Die Daten der Bilddatei beginnen erst bei iVBORw....
Gruss
tobi
|
|