2012-04-24 6 views
6

받은 편지함의 모든 메시지에 포함 된 사람의 목록을 얻고 싶습니다. 지금 내가 메시지를 IMAP를 통해 연결 및 다운로드 javax의 메일 API를 사용할 수 있습니다Java에서받은 편지함을 더 빨리 읽을 수 있습니다.

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(); 
} 

라인 메시지를 [I] .getFrom은() 나는 때문에 좋아하는 것보다 느린입니다 게으르게 될 수있는 메시지가 나타납니다 짐을 실은. 이 속도를 높이기 위해 할 수있는 일이 있습니까? 예 : 메시지를 하나씩로드하는 대신 일종의 일괄로드가 있습니까? 이 메시지가 전체 메시지를로드하고 대신/to/cc 필드 나 헤더 만로드 할 수있는 방법이 있습니까? POP가 IMAP보다 빠르지 않습니까?

답변

5

fetch -method를 Folder에 사용할 수 있습니다. Javadocs에 따르면 :

클라이언트는이 메서드를 사용하여 지정한 항목이 지정된 메시지 범위에 대해 에 en-masse가 필요함을 나타냅니다. 해당 메시지 범위에 대해 효율적인 방법으로 항목을 검색 할 구현은 입니다. 이 메소드는 원하는 항목을 프리 페치 (prefetch)하기 위해 구현에 대한 힌트 일뿐입니다.

적절한 FetchProfile에서 가져 오는 데는 ENVELOPE입니다. 물론 아직까지는 구현이 이루어져 있으며 메일 서버가 실제로 도움이됩니다.

6

당신은 루프

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

이가에 /에서/주제/CC 필드를 포함하는 모든 메시지에 대해 "봉투를"프리 페치됩니다에 대한 전에 다음을 추가합니다.

관련 문제