通过 imap 将电子邮件与本地数据库同步


Sync emails over imap with a local database

对于php erp系统中的电子邮件历史记录,我想将电子邮件与IMAP与本地mysql数据库同步。

下载所有

带有附件的邮件比我想象的要快(5 条邮件大约需要 6000 分钟),但在下载所有邮件后,只下载更改会很棒。问题是我不能依赖电子邮件的日期,因为标记(已查看,标记,已回答,已删除)会随着时间的推移而更改。

是否有可能只获取更改的电子邮件,像 Thunderbird 这样的本地电子邮件客户端的最佳实践是什么?

据我了解协议,有一个服务器"推送"方法,但 php 脚本不应该一直连接,就像本地电子邮件客户端一样。

这个答案非常有用,所以我必须下载标头(没有正文)并比较每个请求中的所有消息?

编辑

我知道像 imapsync 这样的工具已经存在,但我想在没有外部依赖项的情况下做到这一点。

如果目的是从 imap 服务器下载所有邮件,然后定期检查是否有任何以前未下载并保存到数据库的新电子邮件,那么我建议使用 PEAR Net_IMAP类。

PHP 本机 IMAP 没有设置/获取自定义标志的能力,但使用Net_IMAP类,您可以执行以下操作。

  1. 连接到 IMAP 服务器
  2. 阅读消息。
  3. 保存到数据库。
  4. 使用Net_IMAP方法setFlags,在服务器上的该消息上设置自定义标志。

    setFlags('savedToDb')
    

就是这样。下一次迭代连接到IMAP并检查所有没有您设置的标志的邮件。这样,您将能够处理在IMAP和数据库之间成功同步的所有电子邮件。