I’ve been battling PHP’s email reading functions for the better part of two days. I’m writing a script to read emails from a mailbox and save any attachments onto the server. If you’ve ever done something similar, you might understand my pain: PHP doesn’t play well with email!
I’ve connected to the POP3 server and I can iterate the files. Here’s a rough outline of the code:
if (!$mbox = imap_open ('{myserver.com:110/pop3/notls}INBOX', 'u', 'p')) die ('Cannot connect/check mail! Exiting'); if ($hdr = imap_check($mbox)) $msgCount = $hdr->Nmsgs; else die ('Failed to get mail'); foreach ($overview as $message) { $msgStruct = imap_fetchstructure($mbox, $message->msgno); // if it has parts, there are attachments that need reading if ($msgStruct->parts) { foreach ($msgStruct->parts as $key => $part) { switch (strtoupper($part->subtype)) { case 'GIF': case 'JPEG':case 'PNG': //do something - but what?! break; } } } }
I’ve marked where I’m stuck. I can use imap_fetchbody($mbox, $message->msgno, $key+1) but that gets me a bunch of data like this:
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8S EhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEU Hh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAAR CAHiAi0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA ...
I’m lead to believe that this is MIME data. I need it as an image! I’ve seen several classes bombing around the internet that claim to do the required wizardry. I can’t get any of them to work. I don’t understand why I’m finding this so hard!
In short, I’m looking for something that can turn a raw MIME string into real data.
I found a quick guide how to treat emails with PHP: here.
At the bottom of that page there’s a attachment-body
echo:I guess this is what you might need…
(edit: in your case if it’s image always you can skip the
ifpart. And of course, save the file instead of echoing it:)