【发布时间】:2011-11-11 10:16:53
【问题描述】:
我正在寻找获取前 X 个最近活跃的 Gmail 线程列表的最佳方式。
背景:
我在 Google Apps for Education 域中使用 Java 访问 IMAP with OAuth。 Gmail Atom inbox feed 可用,它可以列出最后 20 个包含未读消息的线程。访问此提要似乎比我使用 OAuth/IMAP 生成的任何内容都快得多。
与 Gmail Atom 收件箱提要相比,使用 IMAP 方法的优势在于使用 IMAP,我可以访问任意数量的邮件(不仅仅是 20 条)、查看已读邮件、获取线程大小、获取任何关联的谷歌标签、获取配额详细信息并检查标志。从本质上讲,这将为我的用户提供更多类似 Gmail 的体验(我只需要我们的门户网站的只读体验)。我的问题是 IMAP 访问比 Atom 提要慢得多。比较而言,IMAP 方法大约需要 10 秒,而 Atom 提要通常在 2 秒内返回。
我知道并且一直在使用Gmail IMAP Extensions 和Gmail Advanced Search syntax。
当前方法:
假设我想要 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;
有没有比遍历收件箱直到识别出 X 个不同的消息线程更好的方法?
【问题讨论】:
标签: oauth gmail imap gmail-imap jakarta-mail