mmssix Posted September 11, 2009 Share Posted September 11, 2009 First off I just want to say that you guys have been a great help. I've been dabbling in PHP for a while now and it seems that whenever i cant figure something out I can always find the answer here, many thanks. Now down to business, as it were... I found this cool little class on phpclasses.org that signs into a pop account, grabs any attachments that are in the inbox, and then saves them to a file in my webspace. The problem is this: when an email with attachment is sent from a regular mail account (thunderbird, yahoo, gmail, etc) the script works fine, but when I try to text a pic from my phone(verizon or BB), it refuses to work. Now I think I have the problem narrowed down to how the attachment is added to the email, as gmail uses the line: Content-Type: image/jpeg; name="arm.jpg" Content-Disposition: attachment; filename="arm.jpg" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fzgggofj0 But when it comes from the cell that part of the email looks like this: Content-Type: image/jpeg; name="arm.jpg" Content-ID: <arm.jpg> Content-Location: arm.jpg Content-Transfer-Encoding: base64 x-drm: forward I'm not totaly sure but i think the problem is how the script looks for an attachment around line 54. If anyone has an idea it would be greatly appreciated. Here is the class: <?php # Coded By Jijo Last Update Date [Jan/19/06] (http://www.phpclasses.org/browse/package/2964.html) # Updated 2008-12-18 by Dustin Davis (http://nerdydork.com) # Utilized $savedirpath parameter # Added delete_emails parameter class ReadAttachment { function getdecodevalue($message,$coding) { switch($coding) { case 1: $message = imap_8bit($message); break; case 2: $message = imap_binary($message); break; case 3: $message=imap_base64($message); break; case 4: $message = imap_qprint($message); break; } return $message; } function getdata($host,$login,$password,$savedirpath,$delete_emails=false) { // make sure save path has trailing slash (/) $savedirpath = str_replace('\\', '/', $savedirpath); if (substr($savedirpath, strlen($savedirpath) - 1) != '/') { $savedirpath .= '/'; } $mbox = imap_open ($host, $login, $password) or die("can't connect: " . imap_last_error()); $message = array(); $message["attachment"]["type"][0] = "text"; $message["attachment"]["type"][1] = "multipart"; $message["attachment"]["type"][2] = "message"; $message["attachment"]["type"][3] = "application"; $message["attachment"]["type"][4] = "audio"; $message["attachment"]["type"][5] = "image"; $message["attachment"]["type"][6] = "video"; $message["attachment"]["type"][7] = "other"; for ($jk = 1; $jk <= imap_num_msg($mbox); $jk++) { $structure = imap_fetchstructure($mbox, $jk , FT_UID); $parts = $structure->parts; $fpos=2; for($i = 1; $i < count($parts); $i++) { $message["pid"][$i] = ($i); $part = $parts[$i]; if($part->disposition == "ATTACHMENT") { $message["type"][$i] = $message["attachment"]["type"][$part->type] . "/" . strtolower($part->subtype); $message["subtype"][$i] = strtolower($part->subtype); $ext=$part->subtype; $params = $part->dparameters; $filename=$part->dparameters[0]->value; $mege=""; $data=""; $mege = imap_fetchbody($mbox,$jk,$fpos); $filename="$filename"; $fp=fopen($savedirpath.$filename,w); $data=$this->getdecodevalue($mege,$part->encoding); fputs($fp,$data); fclose($fp); $fpos+=1; } } if ($delete_emails) { // imap_delete tags a message for deletion imap_delete($mbox,$jk); } } // imap_expunge deletes all tagged messages if ($delete_emails) { imap_expunge($mbox); } imap_close($mbox); } } Link to comment https://forums.phpfreaks.com/topic/173934-grabbing-an-attachment-image-from-an-email/ Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.