[PHP] Kompletten Quellcode einer eMail auslesen (erledigt)

wahnsinn

Teilzeitcholeriker
ID: 13929
L
20 April 2006
1.168
152
Vielleicht bin ich ja total bescheuert und steh auf dem Schlauch, aber ich habe bis jetzt noch keine Möglichkeit gefunden, den kompletten Quellcode einer eMail mit PHP auszulesen.

imap_fetchheader() hat ja anscheinend die Option FT_PREFETCHTEXT - aber da tut sich bei mir überhaupt nichts.

Hier hab ich einen Hinweis zu einem Bug gefunden: https://bugs.php.net/bug.php?id=4447

Das müsste doch schon längst behoben sein, ich verwende PHP 5.1.1 auf Windows. Und wenn der Bug seit 2000 bekannt ist, müsste das doch eigentlich inzwischen gehen...

Mit imap_fetchbody() komm ich auch nicht zum erwünschten Ergebnis. Da muss ich ja immer einen bestimmten Part angeben, ich möchte aber den kompletten Quellcode einer Mail haben.

// edit:
Ich hab die Lösung gefunden. Siehe Beitrag #6.
 
Zuletzt bearbeitet:
Wie sieht denn der Code aus?
Und wass passiert wenn du keinen Flasg verwendest?
Wofür soll es denn sein? Vllt gibt es ja noch geschicktere Methoden ;)
 
PHP:
<?php

$mailbox = imap_open('{example.com/imap:143}INBOX','user','pass');

if($mailbox === FALSE)
{
	echo('Problem!');
}
else
{
	for($i=1, $n=imap_num_msg($mailbox); $i<=$n; $i++)
	{
		$myArray[] = imap_fetchheader($mailbox, $i, FT_PREFETCHTEXT);
	}


	while($mail = next($myArray))
	{
		echo('<div style="border:1px solid black;
		                  padding:10px;
		                  margin:5px;
		                  font-family:Courier New;
		                  font-size:12px;
		                  white-space:pre;">'.$mail.'</div>');
	}
}

?>

Wenn ich imap_fetchheader($mailbox, $i) mach, ändert sich gar nichts.

Irgendwann in ferner Zukunft will ich damit mal Mails vom einen Server auslesen und 1:1 auf einem anderen Server mittels imap_append() wieder ablegen. Also vom einen Server auf einen anderen Server kopieren bzw. verschieben.
Ich kann mir nicht vorstellen, dass es für diesen Zweck eine andere Möglichkeit gibt, aber lasse mich gerne eines besseren belehren.
 
Ich will nicht (nur) den Header, ich will die ganze Nachricht. Und ich will sie nicht weiterleiten, sondern kopieren, also 1:1 absolut identisch auf einem anderen Server wieder ablegen.

imap_fetch_overview() ist eine Übersicht aller im Postfach gespeicherten Nachrichten, aber nicht die Nachricht selbst. Und imap_header() liefert den Inhalt eines Headers in vorgeparster Form.

Was ich aber möchte, ist der Quellcode der Nachricht. So wie du ihn in jedem eMail-Client sehen kannst mit Rechtsklick und Quelltext oder ähnlich.
 
Jetzt ist es offiziell: Ich bin doof. :ugly:

Die Lösung ist so einfach, dass ich gar nicht fassen kann dass ich das nicht schon lange gefunden habe. Aber auch dass mir hier niemand helfen konnte, gibt mir etwas zu denken. ;)

Es gibt nicht nur die Funktion imap_fetchbody(), welche ja nur einen bestimmten Part der Message zurück gibt, sondern auch die zauberhafte Funktion imap_body(), welche den ganzen Body der Mail ungeparst zurück gibt.

Die Lösung ist also mehr als Simpel:

PHP:
imap_fetchheader(int imap_stream, int msg_number).imap_body(int imap_stream, int msg_number)
 
Zuletzt bearbeitet: