我正在寻找获取前 X 个最近活跃的 Gmail 线程列表的最佳方法。
背景:
我在 Google Apps for Education 域中使用 Java 通过OAuth 访问 IMAP 。可以使用Gmail Atom 收件箱提要,它可以列出最后 20 个包含未读邮件的线程。访问这个提要似乎比我使用 OAuth/IMAP 生成的任何东西都要快得多。
与 Gmail Atom 收件箱提要相比,使用 IMAP 方法的优势在于使用 IMAP,我可以访问任意数量的邮件(不仅仅是 20 条)、查看已读邮件、获取线程大小、获取任何关联的谷歌标签、获取配额详细信息并检查标志。从本质上讲,这将为我的用户提供更多类似 Gmail 的体验(我只需要我们的门户网站的只读体验)。我的问题是 IMAP 访问比 Atom 提要慢得多。比较而言,IMAP 方法大约需要 10 秒,而 Atom 提要通常在 2 秒内返回。
我知道并且一直在使用Gmail IMAP 扩展和Gmail 高级搜索语法。
当前方法:
想象一下,我想要 IMAP 收件箱中的前 40 个线程。目前我下载了一些任意数量的消息(40 * 4),只获取X-GM-THRID。我遍历这些存储线程 ID 的消息(如果需要,获取更多消息),直到我用完收件箱消息列表或达到我的目标线程数。
然后,我有一个 Gmail 线程 ID 列表,可用于执行 IMAP 搜索(使用适当的 FetchProfile.Item,具体取决于所需的邮件详细信息)。
我遍历搜索结果,产生类似(使用美妙的Google Guava/Google Collections Multimap):
Multimap<Long, Message> threadMultiMap = LinkedListMultimap.create();
这很容易按摩成:
LinkedHashMap<Long, Message[]> threadMap;
有没有比遍历 INBOX 直到识别出 X 个不同的消息线程更好的方法?