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

Wie eine eMail codiert ist, ist in Standards festgelegt. Diese Standards findest du zum großteil bei der IETF (http://www.ietf.org) - dort solltest du dir evtl SMTP (RFC 821) und MIME (RFC 2045) anschauen. Attachments sind aber sehr wahrscheinlich base64 Codiert - du kannst also einfach das Attachment via base64_decode() dekodieren und in ein File schreiben. Ansonsten stehen in den Headern normalerweise noch infos zur Kodierung - die Header wären soweit ich mich noch erinnere: Content-Type, Mime-Version und Content-Transfer-Encoding...

@YaNOCC: Ich meinte eher du solltest dir mal den Sourcecode anschauen. YaNOCC ist von daher bedeutend schlanker als andere, so dass man ihn schnell durchschauen kann...
 
So, hier mal, komplett unbeschnitten das Script mit dem bei meinem Webmailer (seit Ewigkeit in Arbeit ;) ) die Anhaenge zum Download angeboten werden.
PHP:
<?php
ob_start();
session_start();
require_once('config.php');
require_once('functions.php');
require_once('configfolders.php');
if ((isset($_GET['msgid'])) && (isset($_GET['part'])))
	{
		$mbox=imap_open('{'.MAILHOST.'/norsh/notls}'.$mailbox,$_SESSION['username'],decryptpw($_SESSION['password']));
		$struct=imap_fetchstructure($mbox,$_GET['msgid']);
		$body=imap_fetchbody($mbox,$_GET['msgid'],$_GET['part']+1);
		imap_close($mbox);
		if ($struct->parts[$_GET['part']]->type==0)
			{
				$content_type='text';
			}
		elseif ($struct->parts[$_GET['part']]->type==4)
			{
				$content_type='audio';
			}
		elseif ($struct->parts[$_GET['part']]->type==5)
			{
				$content_type='image';
			}
		//elseif ($struct->parts[$_GET['part']]->type==3)
		else
			{
				$content_type='application';
			}
		$content_type.='/'.strtolower($struct->parts[$_GET['part']]->subtype);
		$content_disposition=strtolower($struct->parts[$_GET['part']]->disposition);
		//header("Content-Type: application/octet-stream");
		header('Content-Type: '.$content_type);
		//header('Content-Disposition: attachment; filename="'.$struct->parts[$_GET['part']]->dparameters[0]->value.'"');
		header('Content-Disposition: '.$content_disposition.'; filename="'.$struct->parts[$_GET['part']]->dparameters[0]->value.'"');
		if ($struct->parts[$_GET['part']]->encoding==3)
			{
				$body=base64_decode($body);
			}
		if ($struct->parts[$_GET['part']]->encoding==4)
			{
				$body=quoted_printable_decode($body);
			}
		echo $body;
	}
ob_end_flush();
?>
 
Zurück