2010-03-29 5 views
4

저는 javamail을 사용하여 IMAP 서버 (현재 GMail)에서 메일을 검색하고 있습니다. Javamail은 서버에서 특정 폴더의 메시지 목록 (ID 만)을 매우 빠르게 검색하지만 실제로 메시지를 가져올 때 (내용도 포함하지 않음) 각 메시지마다 약 1-2 초가 걸립니다. 빠른 검색을 위해 어떤 기법을 사용해야합니까? 이 그것이 Gmail이 문제가 될 수만큼 많이 JavaMail에 문제가있는 경우 잘 모르겠어요Javamail 성능

try { 
     IMAPStore store = null; 
     if(store!=null&&store.isConnected())return; 
     Properties props = System.getProperties(); 
     Session sessionIMAP = Session.getInstance(props, null); 
     try { 
      store = (IMAPStore) sessionIMAP.getStore("imaps"); 
      store.connect("imap.gmail.com",993,"[email protected]","password"); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     IMAPFolder folder = (IMAPFolder) store.getFolder("INBOX"); 
     folder.open(Folder.READ_ONLY); 
     System.out.println("start"); 
     Message[] msgs = folder.getMessages(1,10); 
     long ftime = System.currentTimeMillis(); 
     FetchProfile fp=new FetchProfile(); 
     fp.add(FetchProfile.Item.ENVELOPE); 
     folder.fetch(msgs, fp); 
     long time = System.currentTimeMillis(); 
     System.out.println("fetch: "+(time-ftime)); 
     for (Message message : msgs) { 
      System.out.println(message.getSubject()); 
      Address[] from = message.getFrom(); 
      for (Address address : from) { 
       System.out.println(address); 
      } 
      Address[] recipients = message.getAllRecipients(); 
      for (Address address : recipients) { 
       System.out.println(address); 
      } 

     } 
     long newTime = System.currentTimeMillis(); 
     System.out.println("convert: "+(newTime-time)); 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 


} 

답변

1

:

여기 내 코드입니다. Gmail을 비롯한 여러 소스에서 메일을 가져 오는 응용 프로그램이 있으며 Gmail은 확실히 가장 느립니다. Javamail API는 매우 간단하지만 현재 수행중인 작업을 보지 않고 제안을하는 것은 어려울 것입니다.

4

Gmail이 IMAP 메시지를 1 초마다 읽지 않도록 조절한다고 생각합니다. 여러 개의 IMAP 연결을 사용하여 속도를 향상시킬 수 있습니다.