我正在尝试阅读我的应用程序的电子邮件收件箱 - 我在这里使用 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 客户端检查这些电子邮件也有消息正文。我在这里缺少什么?
您需要先检查邮件是否是多部分消息,然后再循环各部分。如果它不是多部分的,那么身体将通过$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());
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)