【发布时间】:2013-12-28 05:04:19
【问题描述】:
这更多是关于最佳实践的问题 - 我希望没问题。
我使用 PHP 和 IMAP 每 30 分钟从一个 Gmail 帐户获取电子邮件。我只希望脚本抓取 30 分钟前的电子邮件,因此它永远不会抓取相同的电子邮件两次。
搜索查询中有一个“since”命令:
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 作业执行电子邮件脚本时,我都可以将时间存储在数据库中,并使用该时间作为参考来检查此后的所有电子邮件。但是我需要为一个字段创建一个全新的表?
我在想一定有更好的解决方案....
【问题讨论】:
-
抱歉,我没有完整的答案,但我在 SO:stackoverflow.com/questions/15166280/… 上找到了这个主题,这表明也许你可以用 UID 做一些事情。特别是
04 UID FETCH 58:* UID在 UID 58 之后仅获取消息的 UID 听起来很有用 - 如果你能以某种方式跟踪你看到的最后一个 UID。