当我在我的GMail收件箱中运行一个非常简单的imap_search
时,搜索返回的消息少于应有的消息。
以下是任何拥有GMail帐户的人都可以运行的脚本。
$host = '{imap.gmail.com:993/imap/ssl}';
$user = 'foo';
$pass = 'bar';
$imapStream = imap_open($host,$user,$pass) or die(imap_last_error());
$messages = imap_search($imapStream,"ALL");
echo count($messages);
imap_close($imapStream);
这将返回39条消息。但是,我的收件箱中有100条消息,有些是在对话中捆绑的,有些是从另一个帐户转发的(SquirrelMail)。
任何人都可以复制这些结果,和/或告诉我发生了什么事吗?
我尝试过的其他服务器字符串,都返回相同的结果:
{imap.gmail.com:993/imap/ssl/novalidate-cert}
{imap.gmail.com:993/imap/ssl/novalidate-cert}INBOX
{imap.gmail.com:993/imap/ssl}INBOX
GMail的IMAP功能支持:http://mail.google.com/support/bin/answer.py?hl=en&answer=78761
答案 0 :(得分:8)
大量脱发后,我找到了答案。这是一个误导性的UI。
GMail默认将一条消息分组为“对话”。这些对话可以包括存档的消息。
因此,例如,Bob的收件箱看起来像有25个邮件的4个对话,这显然会返回100个收件箱邮件。实际上,60条消息都在存档中(不是收件箱),因此imap_search()
会返回40
。这些消息被神奇地从存档中拉出并放入收件箱对话中。
在设置 - >常规菜单中,您可以切换会话视图,这会将所有这些顽皮的存档邮件放回原来的位置,并显示您的真实收件箱视图。
答案 1 :(得分:0)
imap_search criteria ALL - 返回符合其余条件的所有邮件,所以我问你剩下的标准在哪里?
您可以使用imap_sort($imapStream, 'SORTDATE', 0);
(imap_sort - 按给定参数imap_sort获取和排序消息编号)。
编辑,这里有一些代码通过您收件箱中的所有邮件,而不是imap_num_msg,您可以使用之前所述的imap_sort,因此如果您愿意,可以对收件箱进行排序。
<?php
$imap = imap_open("{mail.yourserver.com:143}INBOX", "username", "password");
$message_count = imap_num_msg($imap);
for ($i = 1; $i <= $message_count; ++$i) {
$header = imap_header($imap, $i);
$body = trim(substr(imap_body($imap, $i), 0, 100));
$prettydate = date("jS F Y", $header->udate);
if (isset($header->from[0]->personal)) {
$personal = $header->from[0]->personal;
} else {
$personal = $header->from[0]->mailbox;
}
$email = "$personal <{$header->from[0]->mailbox}@{$header->from[0]->host}>";
echo "On $prettydate, $email said \"$body\".\n";
}
imap_close($imap);
?>