我正在尝试获取来自特定电子邮件地址的最新未见邮件列表。
$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进行相同操作,然后看看会发生什么。