e-Mailfunktionen / POP3: Anhänge werden nicht erkannt

stephandziurla

Erfahrenes Mitglied
Hallo!

Ich habe mal eine Frage: Mittels der IMAP-Funktionen unter PHP bastele ich mir gerade einen kleinen e-Mailclienten zusammen, der Teil eines DMS werden soll.
Verbinden, Auslesen (auch das detaillierte Auslesen einer einzelnen Mail) scheinen zu klappen - bis auf eine Ausnahme: verfügt eine Mail über Anhänge werden diese nicht erkannt.

Man erkennt zwar an der Dateigröße, dass es sich um eine Mail mit Anhängen handeln könnte, nur wird dies nicht angezeigt - und die Anhänge als solche bei einer Detailansicht auch nicht. Woran kann das liegen?

PHP:
<?for($x=$total; $x>0; $x--) 
{
	// Header und Struktur der Mails definieren
	$headers = imap_header($inbox, $x);
	$structure = imap_fetchstructure($inbox, $x);
?>

<tr>
<td align="right" valign="top">
<input type="Checkbox" name="dmsg[]" value="<? echo $x; ?>">
</td>
<td valign="top">
<?
// parse structure to see if attachments exist
$sections = parse($structure);
$attachments = get_attachments($sections);
if(is_array($attachments)) 
{ 
	echo "<img alt=\"Email Has Attachment\" src=\"QUELLE.jpg\" width=20 height=20 border=0>"; 
}
else
{
	echo "XX";
}
?>

Ich hoffe, dass mir da jemand weiterhelfen kann, weil das ganze sehr ärgerlich ist. Ich weiß nicht, ob ich da einen Denkfehler oder ähnliches habe, aber es wäre schön, einen Hinweis von jemandem zu bekommen,

vielen Dank schonmal im Voraus!!
 
Zuletzt bearbeitet:
Oh. Entschuldige!

Ja, die beiden Funktionen "parse" und "get_attachments" sind Marke Eigenbau, bzw. aus einer vorhandenen e-Mailapplikation in PHP (darauf basiert das gesamte Programm). Hier die beiden Funktionen der Vollständigkeit halber:

PHP:
function parse($structure)
{
	global $type;
	global $encoding;
	
	// create an array to hold message sections
	$ret = array();
	
	// split structure into parts
	$parts = $structure->parts;
	
	#Move through message parts.
	for($x=0; $x<sizeof($parts); $x++)
	{
		$ret[$x]["pid"] = ($x+1);	
	
		$this = $parts[$x];
	
		/* Default To Text */
		if ($this->type == "") { $this->type = 0; }
		$ret[$x]["type"] = $type[$this->type] . "/" . strtolower($this->subtype);	
	
		/* Default to 7-Bit */
		if ($this->encoding == "") { $this->encoding = 0; }
		$ret[$x]["encoding"] = $encoding[$this->encoding];	
		
		$ret[$x]["size"] = strtolower($this->bytes);	
		
		$ret[$x]["disposition"] = strtolower($this->disposition);	
		
		if (strtolower($this->disposition) == "attachment")
		{
			$zparam = $this->parameters;
			foreach ($zparam as $z)
			{
				if($z->attribute == "FILENAME")
				{
				$ret[$x]["name"] = $z->value;	
				break;			
				}
			}
		}
}
return $ret;
}
//-------------------------------------------------------------------------------------------------------------------------

function get_attachments($arr)
{
	for($x=0; $x<sizeof($arr); $x++)
	{
		if($arr[$x]["disposition"] == "attachment")
		{
		$ret[] = $arr[$x];
		}
	}
	return $ret;
}
 
Hmmm...schade, dass da bislang noch keiner auf eine brauchbare Idee gestoßen ist.
Da ich auch seit Tagen das Internet diesbezüglich unsicher mache, jedoch noch nichts gefunden habe, wär es schön, wenn jemand noch eine Ahnung hätte.

Vielleicht noch einmal zum allgemeinen Verständnis:
Ich habe ein POP3-Postfach, dass ich auslesen möchte. Aus der gesamten Nachricht möchte ich die Adressinformationen (From, To (Cc/BCc), Subject, Date, Size), sowie den eigentlich Inhalt (Body) der Mail und eventuell anhängende Attachments auslesen. Getrennt voneinander.

Wie schaffe ich es denn, dass ich - wenn ich bspw. eine Mail mit einem JPG schicke, ich dieses JPG auch so anschauen kann (quasi eine Vorschau).
Des Weiteren möchte ich einzeln auf die Elemente der Mail zugreifen können (um sie dann evtl. später zu speichern etc.)

Wäre super, wenn mir da jemand einen Tip geben könnte. Bitte jedoch nicht den Tip Mach dich mit den IMAP-Funktionen vertraut. - Ich denke, ich bin ein wenig darüber hinaus. Zudem sind einige Teile noch undokumentiert und bringen so nicht wirklich etwas. ;)
 
Nur eine Idee - aber könnten es evtl die falschen Parameter sein, die du ausliest? Schon mal "$this->dparameters" versucht anstatt "$this->parameters". Und kannst du davon ausgehen, dass "FILENAME" immer Uppercase ist?
 
Hmm, daran scheint es wohl nicht zu liegen. Ich hatte es gerade mal ausprobiert, weil deine Idee IMHO nicht schlecht klang. Dennoch habe ich jetzt sogar noch weniger: die Nachricht wird nicht mehr angezeigt. :-(

Es ist echt zum verzweifeln. Davon abgesehen, dass die Funktion imap_fetchstructure nur unzureichend dokumentiert ist (finde ich).... es gibt wohl auch kein geeignetes Beispiel. Dennoch probiere ich es mal mit einer komplett fertigen und aufgeblähten Lösung, die ich mal hochladen werde. Bei Programmen wie "tinned mail" oder ähnlichen funktioniert das ja auch alles..... mal schauen.

Aber falls noch jemand eine Idee hat (auch vielleicht ohne die von mir angeführten Funktionen und vielleicht "ganz einfach")...... bin für alles offen! :p
 
Wenn es mein Projekt wäre, würde ich jetzt in anderen open Source webmailern schauen wie die es gelöst haben ;) - zum Beispiel YaNOCC... Squirrelmail nicht - die haben ihre eigenen IMAP Klasse verwendet...
 
Ich kann nachher mal schauen wie ich das mit den Anhaengen gemacht hab, hatte vor einer ganzen Weile auch mal angefangen wie einen Webmailer aus dem Aermel zu schuetteln.
Die Dokumentation der IMAP-Funktionen fand ich dabei aber garnicht so schlecht. Ich weiss jetzt nicht ob die deutsche Doku da etwas "rueckstaendig" ist, aber ich bin damals mit der englischen gut zurechtgekommen.
 
Also das wäre wirklich super, wenn du das machen würdest.
Wie gesagt, alles basiert auf einem von mir umfunktionierten Skript ("MyMail"). - Inzwischen schein ich sogar so "belämmert" zu sein, dass ich es noch nicht mal schaffe, den von A.Gaisbauer benannten "YANOCC" zu konfigurieren. Eigentilch doch alles einfach: die Mailserver eintragen, Datei umbenennen und uploaden.
Naja - jedenfalls seh ich nach erfolgreichen() Login nichts! - Auch kann ich bei dem Skript jedes x-beliebige Kennwort eingeben....er scheint sich stets zu verbinden.... Also YaNOCC find ich nicht so super.... aber egal.

Nein, es wäre wahnsinnig nett, wenn du da eine Lösung hast und mal nachschauen könntest. Gern bin ich auch bereit, eine komplett andere Lösung als Richtwert für mein Projekt zu nehmen...


ich dank dir schonmal!
 
Also......bis dato hab ich es geschafft, dass ich alle Teile der e-Mail getrennt voneinander ausgeben lassen kann. Ich kann also auf den Body der Mail zugreifen und mir zugleich - wenn auch codiert - den Anhang anzeigen lassen.

Ich stelle mir gerade die Frage, wie ich nur im Vorfeld weiß, in welcher Art und Weise eine Mail codiert bei mir ankommt....ist das von Mailclient unterschiedlich oder geht das nach Art des Versands.....oder nach dem Inhalt der Mail :confused:

@Dennis Wronka: Hattest du schonmal Zeit finden können, um mal nachzuschauen?
 
Zurück