我目前正在尝试从我的服务器获取UNSEEN / UNREAD消息。目前,我有这个:
$openmail = imap_open($dns, $email, $password) or die("Cannot Connect " . imap_last_error());
if ($openmail) {
/* grab emails */
$emails = imap_search($openmail, 'UNSEEN');
if ($emails) {
//For every e-mail.
$tot = imap_num_msg($openmail);
for ($i = $tot; $i > 0; $i--) {
$structure = imap_fetchstructure($openmail, $i);
if (isset($structure->parts) && is_array($structure->parts) && isset($structure->parts[1])) {
$part = $structure->parts[1];
$message = imap_fetchbody($openmail, $i, 2, FT_PEEK);
if ($part->encoding == 3) {
$message = imap_base64($message);
} else if ($part->encoding == 1) {
$message = imap_8bit($message);
} else {
$message = imap_qprint($message);
}
}
$header = imap_header($openmail, $i);
$from = imap_utf8($header->fromaddress);
$subject = $header->Subject;
$subject = substr($subject, 0, 150);
$date = $header->Date;
}
/* Print out the Unseen messages in here! */
} else {
/* No unseen messages */
echo "No unseen";
}
}
我尝试将多个电子邮件发送到我的邮件服务器,使用上面的脚本刷新页面。但我一直得到“不可见”。
我试图输出$emails
,但它是空的。它找不到任何东西。
如果我尝试获取所有邮件(没有看不见的过滤器),我可以看到我发送到邮箱的电子邮件,但是,它们都被标记为已读。
答案 0 :(得分:0)
您的代码$message = imap_fetchbody($openmail, $i, 2, FT_PEEK);
使用硬编码的部分偏移,即它假设消息始终为multipart/alternative
text/plain
和text/html
。这是一个非常错误的假设。
您必须查看BODYSTRUCTURE
的输出,以查看邮件的MIME结构。
除此之外,请确保您的所有命令都不使用BODY
获取操作;你必须使用BODY.PEEK
。我不知道如何在PHP c-client绑定中访问它。