I am running a script to log into an IMAP/POP mailbox, forward the content to a new email address, and then remove them from the mailbox.
It's almost working now, except that for some odd, inexplicable reason, forwarded attached images that are send to our Ning site look squashed, whereas emails with image attachments sent directly to Ning's uploading email address, appear perfectly formed. So something about our forwarded email format is different. As if the images in the attachments are not exactly the same as they originally were.
An example of a squashed image upload http://members.bigmanwalking.com/photo/a-test-photo?context=latest
Any help would be great... It's a puzzle why images should have lost their shape suddenly by going through this script.
<?php
// Change to your mail server
$host = "pop.1and1.co.uk";
// Connecting to POP3 email server.
$connection = imap_open("{" . $host . ":110/pop3/notls}", 'test@bigmanwalking.com', 'xxxx');
// Total number of messages in Inbox
$count = imap_num_msg($connection);
echo $count . " messages found<br />";
// Read Messages in Loop, Forward it to Actual User email and than delete it from current email account.
for ($i = 1; $i <= $count; $i++) {
$headers = imap_headerinfo($connection, $i);
$subject = $headers->subject;
$from = $headers->from[0]->mailbox . '@' . $headers->from[0]->host;
if ($headers->cc[0]->mailbox)
$cc = $headers->cc[0]->mailbox . '@' . $headers->cc[0]->host;
$subject = $headers->subject;
$structure = imap_fetchstructure($connection, $i);
//$type = $this->get_mime_type($structure);
// GET HTML BODY
//$body = $this->get_part($connection, $i, "");
$raw_body = imap_body($connection, $i);
$attachments = array();
if (isset($structure->parts) && count($structure->parts)) {
for ($e = 0; $e < count($structure->parts); $e++) {
$attachments[$e] = array('is_attachment' => false, 'filename' => '', 'name' => '', 'attachment' => '');
if ($structure->parts[$e]->ifdparameters) {
foreach ($structure->parts[$e]->dparameters as $object) {
if (strtolower($object->attribute) == 'filename') {
$attachments[$e]['is_attachment'] = true;
$attachments[$e]['filename'] = $object->value;
} //if (strtolower($object->attribute) == 'filename')
} //foreach ($structure->parts[$e]->dparameters as $object)
} //if ($structure->parts[$e]->ifdparameters)
if ($structure->parts[$e]->ifparameters) {
foreach ($structure->parts[$e]->parameters as $object) {
if (strtolower($object->attribute) == 'name') {
$attachments[$e]['is_attachment'] = true;
$attachments[$e]['name'] = $object->value;
} //if (strtolower($object->attribute) == 'name')
} //foreach ($structure->parts[$e]->parameters as $object)
} //if ($structure->parts[$e]->ifparameters)
if ($attachments[$e]['is_attachment']) {
$attachments[$e]['attachment'] = @imap_fetchbody($connection, $i, $e + 1);
if ($structure->parts[$e]->encoding == 3) {
// 3 = BASE64
$attachments[$e]['attachment'] = base64_decode($attachments[$e]['attachment']);
} //if ($structure->parts[$e]->encoding == 3)
elseif ($structure->parts[$e]->encoding == 4) {
// 4 = QUOTED-PRINTABLE
$attachments[$e]['attachment'] = quoted_printable_decode($attachments[$e]['attachment']);
} //elseif ($structure->parts[$e]->encoding == 4)
} //if ($attachments[$e]['is_attachment'])
if ($attachments[$e]['is_attachment']) {
$filename = $attachments[$e]['filename'];
$filename = $attachments[$e]['name'];
$filecontent = $attachments[$e]['attachment'];
} //if ($attachments[$e]['is_attachment'])
} //for ($e = 0; $e < count($structure->parts); $e++)
} //if (isset($structure->parts) && count($structure->parts))
echo "<pre>";
echo "From: " . $headers->Unseen . "<br />";
echo "From: " . $from . "<br />";
echo "Cc: " . $cc . "<br />";
echo "Subject: " . $subject . "<br />";
echo "Content Type: " . $type . "<br />";
echo "Body: " . $body . "<br />";
$mail = new Zend_Mail();
$mail->settype(Zend_Mime::MULTIPART_MIXED);
for ($k = 0; $k < count($attachments); $k++) {
$filename = $attachments[$k]['name'];
$filecontent = $attachments[$k]['attachment'];
if ($filename && $filecontent) {
$file = $mail->createAttachment($filecontent);
$file->filename = $filename;
} //if ($filename && $filecontent)
} //for ($k = 0; $k < count($attachments); $k++)
$mail->setFrom($from);
$mail->addTo('test@members.bigmanwalking.com');
if ($cc)
$mail->addCc($cc);
$mail->setSubject($subject);
$mail->setBodyHtml($body);
$mail->send();
// Mark the email messages once read
imap_delete($connection, $i);
} //for ($i = 1; $i <= $count; $i++)
// Delete all marked message from current email account.
imap_expunge($connection);
?>