ted_chou12 Posted December 18, 2008 Share Posted December 18, 2008 Hello, I'm attempting to download the attachment from an message: $structure = imap_fetchstructure($mbox, $id); $message = imap_fetchbody($mbox,$id, "1"); $name = $structure->parts[1]->dparameters[0]->value; $type = $structure->parts[1]->type; ############## type if ($type == 0) { $type = "text/"; } elseif ($type == 1) { $type = "multipart/"; } elseif ($type == 2) { $type = "message/"; } elseif ($type == 3) { $type = "application/"; } elseif ($type == 4) { $type = "audio/"; } elseif ($type == 5) { $type = "image/"; } elseif ($type == 6) { $type = "video"; } elseif($type == 7) { $type = "other/"; } $type .= $structure->parts[1]->subtype; ######## Type end header("Content-type: ".$type); header("Content-Disposition: attachment; filename=".$name); The above gives the correct name, but the file itself seems to be empty, I dont know if the problem is the wrong parts[] or any other problem, thanks for the help, Ted Quote Link to comment Share on other sites More sharing options...
nuttycoder Posted January 16, 2009 Share Posted January 16, 2009 I have the same problem I can get the attachment name to appear but I can't for the life of me download the file if I do download anything its far to small. Anyone managed to download attachments using IMAP? here's my code: //$mbox == imap connection //$mid == message number $info = imap_fetchstructure($mbox,$mid); // find out how may parts the object has $numparts = count($info->parts); // find if if multipart message if ($numparts > 1) { //echo "More then one part<BR>"; foreach ($info->parts as $part) { if ($part->disposition == "inline") { // inline message. Show number of lines // printf("<p>Inline message has %s lines<BR>", $part->lines."</p>"); } elseif ($part->disposition == "attachment") { // an attachment //echo "<p>Attachments</p>"; // print out the file name //echo "<p>Filename: ", $part->dparameters[0]->value."</p>"; //$file = $part->dparameters[0]->value; $file = $part->dparameters[0]->value; header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); unlink ($file); Quote Link to comment Share on other sites More sharing options...
nuttycoder Posted January 24, 2009 Share Posted January 24, 2009 Can anyone help with this? Quote Link to comment Share on other sites More sharing options...
nuttycoder Posted January 25, 2009 Share Posted January 25, 2009 Finally got attachments working with IMAP Here is my code in case it is useful to anyone else: Function to download attachment <?php //--------------------- download attachment function get_attached_file($mbox,$structure,$k,$mid) { $encoding = $structure->parts[$k]->encoding; //extract file name from headers $fileName = strtolower($structure->parts[$k]->dparameters[0]->value); //extract attachment from email body $fileSource = base64_decode(imap_fetchbody($mbox, $mid, $k+1)); //get extension $ext = substr($fileName, strrpos($fileName, '.') + 1); //die($ext); //get mime file type switch ($ext) { case "asf": $type = "video/x-ms-asf"; break; case "avi": $type = "video/avi"; break; case "flv": $type = "video/x-flv"; break; case "fla": $type = "application/octet-stream"; break; case "swf": $type = "application/x-shockwave-flash"; break; case "doc": $type = "application/msword"; break; case "docx": $type = "application/msword"; break; case "zip": $type = "application/zip"; break; case "xls": $type = "application/vnd.ms-excel"; break; case "gif": $type = "image/gif"; break; case "jpg" || "jpeg": $type = "image/jpg"; break; case "png": $type = "image/png"; break; case "wav": $type = "audio/wav"; break; case "mp3": $type = "audio/mpeg3"; break; case "mpg" || "mpeg": $type = "video/mpeg"; break; case "rtf": $type = "application/rtf"; break; case "htm" || "html": $type = "text/html"; break; case "xml": $type = "text/xml"; break; case "xsl": $type = "text/xsl"; break; case "css": $type = "text/css"; break; case "php": $type = "text/php"; break; case "txt": $type = "text/txt"; break; case "asp": $type = "text/asp"; break; case "pdf": $type = "application/pdf"; break; case "psd": $type = "application/octet-stream"; break; default: $type = "application/octet-stream"; } //download file header('Content-Description: File Transfer'); header('Content-Type: ' .$type); header('Content-Disposition: attachment; filename='.$fileName); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($fileSource)); ob_clean(); flush(); echo $fileSource; } ?> Calling function: <?php //$mbox = imap stream //$mid = message id //$parno = message part number $partno = $_GET['download']; $structure = imap_fetchstructure($mbox, $mid); get_attached_file($mbox,$structure,$partno,$mid); ?> Quote Link to comment Share on other sites More sharing options...
vishnugoud Posted March 1, 2014 Share Posted March 1, 2014 (edited) Hello guys please help me how to display the attachment along with email content and that attachment should have a download link. am very new to this concept. please help me out. am getting inbox and outbox perfectly. Thanks in advance Edited March 1, 2014 by vishnugoud Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.