【问题标题】:Using PHP & IMAP to get emails not already grabbed使用 PHP 和 IMAP 获取尚未抓取的电子邮件
【发布时间】: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。

标签: php sql email imap


【解决方案1】:

确实如此。您应该跟踪您下载的消息的 UID。所有到达的新消息都将具有比任何先前消息更高的 UID。因此,只需获取 UID 高于您已有的消息。

【讨论】:

  • UID 是每个文件夹的:确保单独跟踪 INBOX 和 SENT,。
猜你喜欢
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 2011-03-27
  • 2013-04-30
  • 2013-02-16
  • 1970-01-01
  • 2011-11-13
  • 1970-01-01
相关资源
最近更新 更多