Не удается получить тело сообщения определенных почтовых ящиков из почтовых ящиков с использованием рамки Zend?

Привет, ребята, я пытаюсь прочитать почтовый ящик для своего приложения – здесь я использую фреймворк zend. Проблема в том, что я не могу получить тело сообщения для определенных писем. Ниже приводится мой код относительно того, как я это делаю:

$mail = new Zend_Mail_Storage_Imap($mail_options); $all_messages = array(); $page = isset($_GET['page'])?$_GET['page']:1; $limit = isset($_GET['limit'])?$_GET['limit']:20; $offset = (($page-1)*$limit)+1; $end = ($page*$limit)>$c?$c:($page*$limit); for ($i=$offset;$i<=$end;$i++){ $h2t = new html2text(); $h2t->set_allowed_tags('<a>'); if(!$mail[$i]) break; else{ $one_message = $mail->getMessage($i); $one_message->id = $i; $one_message->UID = $mail->getUniqueId($i); $one_message->parts = array(); $one_message->body = ''; $count = 1; foreach (new RecursiveIteratorIterator($mail->getMessage($i)) as $ii=>$part) { try { $tpart = $part; //$tpart->_content = ''; $one_message->parts[$count] = $tpart; $count++; // check for html body if (strtok($part->contentType, ';') == 'text/html') { $b = $part->getContent(); if($part->contentTransferEncoding == 'quoted-printable') $b = quoted_printable_decode($b); $one_message->html_body = $b; $h2t->set_html($b); $one_message->body = $h2t->get_text(); } //check for text body if (strtok($part->contentType, ';') == 'text/plain') { $b = $part->getContent(); if($part->contentTransferEncoding == 'quoted-printable') $b = quoted_printable_decode($b); $one_message->text_body = $b; $one_message->body = $b;//$part->getContent(); } } catch (Zend_Mail_Exception $e) { // ignore } } $all_messages[] = $one_message; } } 

Проблема в том, что случайным образом некоторые сообщения не возвращают даже текстовое тело или тело html. Несмотря на то, что если я проверю использование клиента webvmail, у этих писем есть тело сообщения. Чего мне здесь не хватает?

Solutions Collecting From Web of "Не удается получить тело сообщения определенных почтовых ящиков из почтовых ящиков с использованием рамки Zend?"

Вам нужно проверить, является ли почта первым сообщением, прежде чем перебирать детали. Если он не является многочастным, тогда тело будет отображаться через $mail->getContent() вместо части. Основной пример:

 if ($mail->isMultiPart()) { // Multipart messages handled here foreach() { // loop over parts } } else { // Non multipart messages handled here // default text_body $one_message->text_body = $mail->getContent(); if (strtok($msg->contentType, ';') == 'text/html') { // HTML email with no plain text alternative, set both values $one_message->body = $mail->getContent(); $one_message->text_body = strip_tags($mail->getContent()); } }