2013-07-09 61 views
2

我只想下載主題電子郵件,因爲它需要更少的時間(下載約10張電子郵件,照片大約需要10分鐘:/)。那我現在使用只下載JavaMail&imaps中的電子郵件主題

代碼是:

try { 
     Store store = session.getStore("imaps"); 
     store.connect(...); 

     Folder folder = store.getFolder(folderName); 
     folder.open(Folder.READ_ONLY); 

     message = folder.getMessages(); 

     for (Message m : message) { 
      System.out.println(m.getSubject()); 
     } 

     folder.close(false); 
     store.close(); 
    } catch (MessagingException e) { 
     ... 
    } catch (IOException e) { 
     ... 
    } 

回答

2

在我看來,你應該尋找與預取消息:

FetchProfile fp = new FetchProfile(); 
fp.add(FetchProfile.Item.ENVELOPE); 
fp.add("Subject"); 
folder.fetch(message, fp); 
1

你在做什麼會下載整個郵件信封(但是不是整個郵件),其中包括主題和收件人。下載通常很便宜。如果你真的想只有問題,因爲你永遠不會看其他的信息,你需要使用這樣的事情來處理RAW頭:

String rawvalue = msg.getHeader("Subject", null); 

if (rawvalue == null) 
     return null; 

try { 
     return MimeUtility.decodeText(MimeUtility.unfold(rawvalue)); 
} catch (UnsupportedEncodingException ex) { 
     return rawvalue; 
} 

在其他的答案中所描述的folder.fetch通話將允許您在一個操作中預取所有主題頭,而不是在處理該消息時獲取每個主題頭。如果你決定這是你想要的,你也可以預取整個信封;有關詳細信息,請參閱javadocs。

+0

我想要做的就是優化下載電子郵件。我怎樣才能下載整個郵件信封? – user2365209

+0

我想我不清楚,讓我再試一次......當您訪問需要信封的那部分信息時,信封將按需下載,每封信息。如果您想在批量訪問它們之前「預取」所有信封,請參閱其他答案(Folder.fetch方法)。這有幫助嗎? –