Zend Mail и кодировки, передача контента и т. Д. - унифицированы? - PullRequest
1 голос
/ 30 января 2011

Есть ли в Zend Framework какой-либо класс, который позволяет мне легко читать электронную почту?

Класс Zend_Mail позволяет мне легко получать заголовки, тему и тело контента.Но перевод всего в UTF-8 и читаемый человеком формат все еще является проблемой.

Или я что-то не так делаю?Насколько я могу судить, Zend Framework не позволяет мне легко получать строки UTF-8, которые я могу просто использовать, мне все еще нужно выполнить некоторую постобработку.Верно?

1 Ответ

0 голосов
/ 18 апреля 2012

Ключевым моментом является то, что вам нужно перебирать части внутри Сообщения и находить текст. Когда он у вас есть, вы можете использовать quoted_printable_decode, чтобы получить полезный текст.

Это грубый и готовый код, который читает почтовые ящики IMAP с 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());

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...