Zend Mail和编码,内容传输等 - 统一?

时间:2011-01-30 17:37:08

标签: email zend-framework encoding

Zend Framework中是否有任何课程允许我轻松阅读电子邮件?

Zend_Mail类允许我轻松获取标题,主题和内容正文。但是将所有内容转换为UTF-8和人类可读的格式仍然很痛苦。

或者我做错了什么?据我所知,Zend Framework不允许我轻松获得我可以使用的UTF-8字符串,我仍然需要进行一些后期处理。正确?

1 个答案:

答案 0 :(得分:0)

关键是你需要迭代Message中的部分并找到文本。获得后,您可以使用quoted_printable_decode以有用的方式获取文本本身。

这是一些粗略且准备好的代码,可以使用Zend_Mail读取IMAP电子邮箱:

<?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());

}