【问题标题】:Can't get message body of certain emails from inbox using the Zend framework?无法使用 Zend 框架从收件箱中获取某些电子邮件的消息正文?
【发布时间】:2011-02-14 12:57:25
【问题描述】:

我正在尝试阅读我的应用程序的电子邮件收件箱 - 我在这里使用的是 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;

    }
}

问题是随机一些消息甚至不返回 textbody 或 html 正文。即使我使用 webvmail 客户端进行检查,这些电子邮件也有消息正文。我在这里错过了什么?

【问题讨论】:

    标签: php email zend-framework imap


    【解决方案1】:

    您需要先检查邮件是否是多部分消息,然后再循环部分。如果它不是多部分的,那么主体将通过$mail-&gt;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());
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      相关资源
      最近更新 更多