가장 최근에 활성화 된 Gmail 스레드 목록을 얻는 최적의 방법을 모색 중입니다.Gmail IMAP, 가장 최근에 활성화 된 X 개의 Gmail 스레드에 대한 최적의 방법 검색
배경 : 나는 자바는 Google 교육용 애플리케이션 도메인에 IMAP with OAuth 접근 사용하고
. 읽지 않은 메시지가 들어있는 마지막 20 개의 스레드를 나열 할 수있는 Gmail Atom inbox feed을 사용할 수 있습니다. 이 피드에 대한 액세스는 OAuth/IMAP을 사용하여 생성 한 것보다 훨씬 빠릅니다.
Gmail Atom받은 편지함 피드를 IMAP과 비교할 때 IMAP과 함께 사용하는 것의 이점은 20 가지가 아닌 임의의 수의 메일에 액세스 할 수 있으며 메일 읽기, 스레드 크기 가져 오기, 관련 Google 라벨 가져 오기, 할당량 가져 오기 세부 정보 및 플래그 확인. 본질적으로 이는 내 사용자에게 Gmail과 유사한 경험을 제공합니다 (Google 포털의 읽기 전용 환경 만 필요함). 내 문제는 IMAP 액세스가 Atom 피드보다 상당히 느리다는 것입니다. IMAP 방법의 비교는 약 10 초가 걸리며 Atom 피드는 보통 2 초 이내에 반환됩니다.
저는 Gmail IMAP Extensions과 Gmail Advanced Search syntax을 알고 있고 계속 사용해 왔습니다.
현재 방법 :
내 IMAP받은 편지함에서 상위 40 스레드를 원하는 상상해보십시오. 현재 메시지의 임의의 번호를 다운로드 (40 * 4), X-GM-THRID 만 가져 오는 중입니다. 내가받은 편지함 목록을 다 소모하거나 내 목표 스레드 수에 도달 할 때까지 (필요한 경우 더 많은 메시지 가져 오기)이 스레드 ID를 저장하는 이러한 메시지를 반복합니다.
다음 IMAP 검색을 수행하는 데 사용할 수있는 Gmail 스레드 ID 목록이 있습니다 (어떤 메시지 세부 정보가 필요한지에 따라 적절한 FetchProfile.Item이 있습니다). 반복보다 더 좋은 방법이 있나요
LinkedHashMap<Long, Message[]> threadMap;
:
내가 좋아하는 뭔가 (멋진 Google Guava/Google Collections Multimap과 사용) 생산 검색 결과를 반복 :
Multimap<Long, Message> threadMultiMap = LinkedListMultimap.create();
을이 쉽게로 마사지한다 X 개의 개별 메시지 스레드가 식별 될 때까지 INBOX를 통해?