PHP IMAP_SEARCH语法UNSEEN,SINCE,RECENT会产生意外结果

时间:2019-05-19 13:56:31

标签: php search syntax imap keyword

我正在尝试获取来自特定电子邮件地址的最新未见邮件列表。

$imapResource = GmailAdapter::imapLogin();

$imapEmails = imap_search($imapResource, 'FROM "email@lala.com" SINCE "18-Mar-2019"');

            if (is_array($imapEmails))
            {
                rsort($imapEmails);

                foreach ($imapEmails as $emailIdent)
                {
                    $overview = imap_fetch_overview($imapResource, $emailIdent, 0);
                    $header = imap_header($imapResource, $emailIdent);
                    $subject = $header->subject;
                    $message = imap_fetchbody($imapResource, $emailIdent, '1');
                    $messageExcerpt = substr($message, 0, 150);
                    $partialMessage = trim(quoted_printable_decode($messageExcerpt));
                    $date = date("d F, Y", strtotime($overview[0]->date));

                    dump($overview);
                    dump($message);
                    dump($subject);
                    dump($date);
                }
                imap_close($imapResource);
            }


我尝试过SINCE,RECENT,SEARCH RECENT,SEARCH SINCE,UNSEEN和这些的许多组合,但是它们都带来了空数组。看来,只要我使用上述任何关键字,gmail都会说“ fuck no”,什么也没给我。

我还尝试了许多不同的日期格式,但仍然没有。

如果我专门使用

'FROM "email_address"'

它可以工作,但是它为我提供了从2012年到2018年3月6日的电子邮件ID的子集,所以我什至无法使用它,因为我希望从发件人地址获得所有最近的电子邮件。

我已经在Google和此处进行了一些环顾,似乎没人能找到一个好的答案。

任何人都可以就此以及php IMAP的其他类似问题阐明一些建议吗?为什么这么古怪?

更新

我刚刚尝试使用搜索词“ ALL”,但奇怪的是,它给了我与使用FROM查询相同的最后一个msgno。 1,000,000,日期为2018年3月6日。当然,这一次,消息是连续的(1,000,000,然后是999,999,依此类推),这是在要求“全部”消息时应保持的状态。但是我不知道,这是gmail的限制吗?
我能以某种方式抓取> 1,000,000条消息吗?

更新#2 确认,gmail有一个限制,如果您的邮箱中有超过100万封电子邮件,那么从最早的最早开始,它的抓取次数将不会超过1,00,000,这会引起类似我的问题。不过,这些搜索关键字并没有给我任何应有的东西,例如RECENT或UNSEEN。解决方案似乎涉及确保您最近要抓取的消息少于100万条。我正在尝试使用少于1,000,000封电子邮件的gmail进行相同操作,然后看看会发生什么。

0 个答案:

没有答案