tags:

views:

370

answers:

2

I have this code. It's from the Zend Reading Mail example.

$message = $mail->getMessage(1);

// output first text/plain part
$foundPart = null;
foreach (new RecursiveIteratorIterator($mail->getMessage(1)) as $part) {
    try {
        if (strtok($part->contentType, ';') == 'text/plain') {
            $foundPart = $part;
            break;
        }
    } catch (Zend_Mail_Exception $e) {
        // ignore
    }
}
if (!$foundPart) {
    echo 'no plain text part found';
} else {
    echo $foundPart->getContent();
}

What I can get is the message, that works fine. But trying to decode the message into something readable does not work. I have tried Zend_Mime, imap_mime and iconv with no luck.

This is an example of what I get with $foundPart->getContent();

Hall=F3 heim=FAr

It should say "Halló heimúr"

What I would want is just some library where i could "push button, receive bacon" in practice. What I mean is, I just want to point the library to a POP3 email box and get the email in readable form (without any encoding issues) and the attachments.

imap_mime_header_decode() Gives me an array with the same data.
iconv_ mime_ decode() Does the same

Does anyone have any idea why this is happening or some library where I can just abstract this away (PHP/Python or Perl)

+2  A: 

This could be because of base64 encoding. The Zend_Mail docs say (under 'encoding'):

...All other attachments are encoded via base64 if no other encoding is given in the addAttachment() call or assigned to the MIME part object later.

Try something like:

echo base64_decode($foundPart->getContent());

Also, read: http://framework.zend.com/manual/en/zend.mail.encoding.html

Hope that helped somehow.

karim79
imap_qprint() was the trick. Thanks :)
Ólafur Waage
It's not base64 encoded. It's Quoted-printable:http://en.wikipedia.org/wiki/Quoted-printable
Pawel Lesnikowski
A: 

imap_qprint() was the trick. Thanks :) [2]

Raphael Azeredo