3

我正在寻找获取前 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 个不同的消息线程更好的方法?

4

1 回答 1

1

实际上不是答案,而是相关查询。


马克,根据您的 api 请求,我将发表评论作为答案(http://code.google.com/p/java-gmail-imap/wiki/DisplayingGmailThreadBasedView

您的 lib 是否支持 3 条腿 oauth,我尝试在 repo 中的源代码上查找 XoauthAuthenticator,但找不到它。

谢谢


嗨,阿加莱戈,

我将java-gmail-imap与 XOAUTH 一起使用。JavaMail 中没有明确要求任何更改才能使用 XOAUTH。

如果您查看 XOAUTH 项目(google-mail-xoauth-toolsgoogle-mail-xoauth-tool-java-two-legged),您会发现您可以创建一个 SASL 提供程序,用于针对 Gmail 进行身份验证。参见例如XoauthAuthenticator.java

我希望这有帮助,

标记

于 2012-02-03T00:43:12.057 回答