我想创建一个可以访问多个IMAP邮箱的电子邮件客户端。我还想要一份所有要处理的电子邮件的副本。使用IMAP命令执行此操作的最佳方法是什么?
现在我有一个脚本遍历文件夹,在1:*上FETCHing FLAGS以查看已读取的内容以及之前读取的任何消息是否已标记为新消息,然后对所有消息进行FETCH BODY.PEEK我的数据库中没有。还有更好的方法吗?
答案 0 :(得分:1)
更好的方法是获取所有消息的UID(UID FETCH 1:* FLAGS),将生成的UID列表与数据库进行比较,然后下载您没有的任何消息,并删除除服务器之外的任何消息不(由其他IMAP客户端删除或使用Web界面)。这是复制IMAP文件夹AFAIK的唯一可靠方法。 (并且不要忘记考虑UIDVALIDITY!)
如果除应用程序之外的其他IMAP客户端正在访问邮箱,则原始方法将无法正常工作。从理论上讲,如果你可以持续连接到IMAP服务器,使用NOOP和IDLE检查新的和已删除的消息,它会工作正常,但这在实践中是不可能的 - 即使GMail没有100%的正常运行时间: - )< / p>
最终的IMAP客户端将结合这两种方法。