2017-04-24 64 views
-1

我有一個需要下載電子郵件並將其保存(作爲eml文件)和每個附件作爲使用java和ews託管API的單獨文件的要求。在互聯網上進行了一些搜索後,我寫了下面的java代碼,它似乎在做我想做的事情。然而我對它的效率有一些懷疑,因爲我認爲在這種方法中,每個附件都是從遠程下載的兩次。該評論是否正確,如果有,是否有辦法更有效地做到這一點?使用ews下載含附件的郵件

 item.load(new PropertySet(ItemSchema.MimeContent,ItemSchema.Attachments)); 
     MimeContent mc = item.getMimeContent(); 
     try(FileOutputStream fs = new FileOutputStream("d:\\emailtmp\\"+ Utils.cleanFileName(item.getId().getUniqueId())+".eml");){ 
      fs.write(mc.getContent()); 
     } 
     AttachmentCollection attachments = item.getAttachments(); 
     if(attachments == null) 
      return ; 
     for(Attachment a : attachments){ 
      if (a instanceof FileAttachment){ 
       try(FileOutputStream stream = new FileOutputStream("d:\\emailtmp\\"+Utils.cleanFileName(((FileAttachment) a).getName()));){ 
        FileAttachment fileAttachment = (FileAttachment)a; 
        fileAttachment.load(stream); 
       } 
      } 
     } 

PS:使用EWS託管API 2.0 Java8

回答

1

的附件將在MIME內容,所以如果你想使之更有效率,你應該能夠下載之後重新處理MIME內容用Mime解析器並從那裏提取附件。此外,你的代碼不適合嵌套附加,例如附加信息的附件等。

+0

謝謝你的回答,我沒有提到問題,但我們不處理附加的電子郵件及其附件,只處理第一級。這就是代碼忽略它們的原因。順便說一下,你可以發佈任何鏈接示例代碼(用於從本地存儲對象加載mimecontent的示例代碼)? – cacert

+0

只要找一個你喜歡的Mime庫,並使用你使用的語言工作,例如http://stackoverflow.com/questions/19541792/how-to-parse-raw-mime-content-in-java –

+0

你的意思是下載郵件與EWS和解析與Java郵件的內容?我正在EWS API中尋找解決方案。 – cacert