Gmail IMAP, Поиск оптимального метода для X самых последних активных потоков Gmail - PullRequest
3 голосов
/ 06 сентября 2011

Я ищу оптимальный способ получения списка топовых X самых последних активных тем Gmail.

Справочная информация:

Я использую Java для доступа к IMAP с OAuth в домене Google Apps для учебных заведений. Доступен входящий фид Gmail Atom , в котором могут быть перечислены последние 20 потоков, содержащих непрочитанные сообщения. Доступ к этому каналу кажется очень быстрым, намного быстрее, чем все, что мне удалось создать с помощью OAuth / IMAP.

Преимущество использования подхода IMAP перед входящим фидом Gmail Atom заключается в том, что с IMAP я могу получить доступ к произвольному количеству сообщений (не только 20), просмотреть прочитанные сообщения, получить размер потока, получить любые связанные ярлыки Google, получить сведения о квоте и проверьте флаги. По сути, это даст моим пользователям гораздо больше опыта, подобного Gmail (мне нужен только опыт чтения только для нашего портала). Моя проблема в том, что доступ по IMAP значительно медленнее, чем через канал Atom. Сравнение по методу IMAP занимает около 10 секунд, в то время как подача Atom обычно возвращается в течение 2 секунд.

Я знаю и работал с Gmail IMAP Extensions и Синтаксис расширенного поиска Gmail .

Текущий метод:

Представьте, что мне нужны 40 лучших тем из моей папки входящих сообщений IMAP. В настоящее время я загружаю произвольное количество сообщений (40 * 4), выбирая только X-GM-THRID . Я перебираю эти сообщения, сохраняя идентификатор потока на ходу (выбирая больше сообщений при необходимости), пока не исчерпаю список входящих сообщений или не достигну целевого числа потоков.

Затем у меня есть список идентификаторов потоков Gmail, которые я могу использовать для выполнения поиска IMAP (с соответствующим FetchProfile.Item, в зависимости от того, какие детали сообщения требуются).

Я перебираю результаты поиска, получая что-то вроде (используя замечательный Google Guava / Google Collections Multimap):

Multimap<Long, Message> threadMultiMap = LinkedListMultimap.create();

и это легко массируется в:

LinkedHashMap<Long, Message[]> threadMap; 

Есть ли лучший способ, чем перебирать INBOX до тех пор, пока не будут определены X отдельных потоков сообщений?

1 Ответ

1 голос
/ 03 февраля 2012

На самом деле это не ответ, а релевантный запрос.


Отметьте, согласно вашему запросу API, я публикую комментарий как ответ (http://code.google.com/p/java-gmail-imap/wiki/DisplayingGmailThreadBasedView)

Поддерживает ли ваша библиотека 3 oauth, я попытался найти XoauthAuthenticator на источнике в репо и не смог его найти.

Спасибо


Привет agallego,

Я использую java-gmail-imap с XOAUTH. В JavaMail нет ничего явно требующего каких-либо изменений для работы с XOAUTH.

Если вы посмотрите на XOAUTHпроекты ( google-mail-xoauth-tools и google-mail-xoauth-tool-java-two-legged ) вы увидите, что вы можете создать поставщика SASL, который можно использоватьпройти аутентификацию в Gmail. См., например, XoauthAuthenticator.java

Надеюсь, это поможет,

Mark

...