2013-12-10 98 views
0

这更多的是关于最佳实践的问题 - 我希望没关系。使用PHP和IMAP获取尚未获取的电子邮件

我使用PHP和IMAP每30分钟从Gmail帐户中获取电子邮件。我只希望脚本能够在30分钟前抓取电子邮件,所以它永远不会抓取同一封电子邮件两次。

有一个“自”命令,在搜索查询:

imap_search($inbox, 'SUBJECT "Ticket #" SINCE "'.date("Y-m-d").'"'); 

但这将只需要一个日期,而不是时间。

我可以在技术上做一个遍历所有的电子邮件,只抢电子邮件,是从当前时间30分钟的路程:

$email_time = strtotime($overview[0]->date); 
$current_time = strtotime('-30 minutes'); 
if($email_time >= $current_time) { 
    ... 
} 

我不相信这是一个可靠的解决方案,但因为其对说电子邮件没有延迟,或者如果服务器停机几分钟会发生什么?

每次cron作业执行电子邮件脚本时,我都可以将时间存储在数据库中,并将该时间用作参考以检查所有电子邮件。但是,我需要创建一个全新的表格,仅用于一个字段?

我在想,必须有更好的解决方案....

+0

对不起,我没有一个完整的答案,但我发现这个话题在这里SO: http://stackoverflow.com/questions/15166280/php-fetch-over-20000-imap-emails 这表明也许你可以用UID做点什么。尤其是在UID 58听起来很有用的时候,它会去“04 UID FETCH 58:* UID”获取消息的UID,如果你能以某种方式跟踪你所看到的最后一个UID。 – CompuChip

回答

1

的确。你应该跟踪你下载的消息的UID。所有到达的新消息都将具有比以前消息更高的UID。所以只需获取UID高于你已有的消息。

+0

UID是每个文件夹:确保您分别跟踪INBOX和SENT。 – Max