开发者

Zend Mail and encodings, content-transfer etc. - Unified?

开发者 https://www.devze.com 2023-02-07 18:53 出处:网络
Is there any class in the Zend Framework that allows me to easily read emails? The Zend_Mail class does allow me to easy get headers, subject and the content body. But transferring everything to UTF-

Is there any class in the Zend Framework that allows me to easily read emails?

The Zend_Mail class does allow me to easy get headers, subject and the content body. But transferring everything to UTF-8 and human-readable format is still a pain.

Or am I doing something wrong? As far as I can tell, Zend Framework does not allow me to easily get UTF开发者_Go百科-8 strings that I can just use, I still have to do some post-processing. Right?


The key thing is that you need to iterate over the parts within the Message and find the text. Once you have it, then you can use quoted_printable_decode to get the text itself in a useful way.

This is some rough and ready code that reads IMAP email boxes with Zend_Mail:

<?php
$mail = new Zend_Mail_Storage_Imap(array(
        'host'   => EMAIL_ACCOUNT_HOST,
        'user'     => EMAIL_ACCOUNT_USERNAME,
        'password' => EMAIL_ACCOUNT_PASSWORD,
    ));

echo (int)$mail->countMessages() . " messages found\n";

foreach ($mail as $message) { 

    $from = $message->getHeader('from');
    $subject = trim($message->subject);
    $to = trim($message->to);
    $body = getBody($message);

    // do something with message here
}

function getBody(Zend_Mail_Message $message)
{
    // find body
    $part = $message;
    $isText = true;
    while ($part->isMultipart()) {
        $foundPart = false;
        $iterator = new RecursiveIteratorIterator($message);
        foreach ($iterator as $part) {
            // this detection code is a bit rough and ready!
            if (!$foundPart) {
                if (strtok($part->contentType, ';') == 'text/html') {
                    $foundPart = $part;
                    $isText = false;
                    break;
                } else if (strtok($part->contentType, ';') == 'text/plain') {
                    $foundPart = $part;
                    $isText = true;
                    break;
                }
            }
        }

        if($foundPart) {
            $part = $foundPart;
            break;
        }
    }
    $body = quoted_printable_decode($part->getContent());

}
0

精彩评论

暂无评论...
验证码 换一张
取 消