Jump to content

Grabbing an attachment (Image) from an email


mmssix

Recommended Posts

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);
}
}


Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.