2012-04-24 17 views
6

Chciałbym uzyskać listę osób, które kiedykolwiek zostały uwzględnione w wiadomościach w mojej skrzynce odbiorczej. Teraz można korzystać z API javax mail aby łączyć się za pośrednictwem protokołu IMAP i pobrać wiadomości:Szybsze odczytywanie skrzynki odbiorczej w Javie

Folder folder = imapSslStore.getFolder("[Gmail]/All Mail"); 
folder.open(Folder.READ_ONLY); 
Message[] messages = folder.getMessages(); 

for(int i = 0; i < messages.length; i++) { 
    // This causes the message to be lazily loaded and is slow 
    String[] from = messages[i].getFrom(); 
} 

Komunikaty line [i] .getFrom() jest wolniejsze niż chciałbym bo znaczy powoduje wiadomości do leniwie załadowany. Czy jest coś, co mogę zrobić, aby to przyspieszyć? Na przykład. czy mogę ładować zbiorczo zamiast ładować wiadomości jeden po drugim? Czy to ładuje całą wiadomość i czy jest coś, co mogę zrobić, aby załadować tylko pola/nagłówki do/z/cc zamiast? Czy POP byłby szybszy niż IMAP?

Odpowiedz

5

Możesz użyć fetch -metoda w folderze. Według Javadocs:

Klienci korzystają z tej metody, aby wskazać, że określone elementy są potrzebne en-masse dla danego zakresu komunikatów. Wdrażane są wersje , które mają sprawnie pobierać te elementy dla danego zakresu komunikatów w postaci . Zauważ, że ta metoda jest tylko wskazówką do implementacji , aby wstępnie pobrać pożądane elementy.

Do pobierania z odpowiedniego FetchProfile jest ENVELOPE. Oczywiście nadal zależy to od implementacji, a serwer pocztowy naprawdę to pomaga.

6

Chcesz dodać następujące przed pętli for

FetchProfile fetchProfile = new FetchProfile(); 
fetchProfile.add(FetchProfile.Item.ENVELOPE); 
folder.fetch(messages, fetchProfile); 

To wstępne pobieranie z „koperty” dla wszystkich wiadomości, które zawiera z/do pól/przedmiot/CC.

Powiązane problemy