0

我想创建一个可以访问多个 IMAP 邮箱的电子邮件客户端。我还想要一份所有电子邮件的副本以供处理。使用 IMAP 命令执行此操作的最佳方法是什么?

现在我有一个迭代文件夹的脚本,在 1:* 上获取 FLAGS 以查看已阅读的内容,如果任何以前阅读的消息已标记为新消息,则 FETCH BODY.PEEK 对我没有的所有消息在我的数据库中。有没有更好的办法?

4

1 回答 1

1

更好的方法是获取所有消息的 UID(UID FETCH 1:* FLAGS),将生成的 UID 列表与您的数据库进行比较,然后下载您没有的任何消息并删除您拥有但服务器没有的任何消息(例如,由其他 IMAP 客户端或使用 Web 界面删除)。这是复制 IMAP 文件夹 AFAIK 的唯一可靠方法。(并且不要忘记将 UIDVALIDITY 考虑在内!)

如果除了您的应用程序之外还有其他 IMAP 客户端访问邮箱,您的原始方法将无法正常工作。从理论上讲,如果您可以保持与 IMAP 服务器的持续连接,使用 NOOP 和 IDLE 检查新邮件和已删除邮件,那就可以了,但这在实践中是不可能的——即使 GMail 没有 100% 的正常运行时间 :-)

最终的 IMAP 客户端将结合这两种方法。

于 2010-02-19T23:02:29.093 回答