我正在寻找获得最近最活跃的Gmail线程列表的最佳方式。
背景:我使用Java访问IMAP与OAuth在谷歌应用程序的教育领域。Gmail Atom收件箱提要可以列出最近20个包含未读邮件的线程。访问此提要似乎非常快,比我使用OAuth/IMAP生成的任何内容都快得多。
使用IMAP方法相对于Gmail Atom收件箱提要的优点是,使用IMAP我可以访问任意数量的消息(不只是20),查看已读消息,获取线程大小,获取任何相关的google标签,获取配额详细信息并检查标志。从本质上讲,这将给我的用户一个更像Gmail的体验(我只需要我们的门户网站的只读体验)。我的问题是IMAP访问比Atom提要慢得多。相比之下,IMAP方法大约需要10秒,而Atom提要通常在2秒内返回。
我知道并一直在使用Gmail IMAP扩展和Gmail高级搜索语法。
当前方法:假设我想要IMAP收件箱中的前40个线程。目前我下载一些任意数量的消息,比如(40 * 4),只获取 x - gm - three 。我遍历这些消息,存储线程id(如果需要,获取更多消息),直到耗尽收件箱消息列表或达到目标线程数。
然后我有一个Gmail线程id列表,我可以使用它来执行IMAP搜索(使用适当的FetchProfile)。项,取决于需要的消息详细信息)。
我遍历搜索结果,产生类似(使用美妙的Google Guava/Google Collections Multimap):
Multimap<Long, Message> threadMultiMap = LinkedListMultimap.create();
,这很容易变成:
LinkedHashMap<Long, Message[]> threadMap;
是否有比在INBOX中迭代直到确定X个不同的消息线程更好的方法?
实际上不是答案,而是一个相关的查询。
Mark,根据您的api请求,我正在发布评论作为答案(http://code.google.com/p/java-gmail-imap/wiki/DisplayingGmailThreadBasedView)
你的库是否支持3条腿的验证,我试着在repo的源代码上寻找XoauthAuthenticator,但找不到它。
感谢嗨agallego,
我使用java-gmail-imap和XOAUTH。在JavaMail中没有任何明确的东西需要任何更改来使用XOAUTH。
如果您查看XOAUTH项目(google-mail-xoauth-tools和google-mail- XOAUTH -tool-java-two-leg),您将看到您可以创建一个SASL提供者,该提供者可用于针对Gmail进行身份验证。参见XoauthAuthenticator.java
我希望这有帮助,
马克