2014-12-06 40 views
0
public void getMessageById(
      @PathParam("folderName") String folderName, 
      @PathParam("id") String id) { 

     MailMessage mailMessage = new MailMessage(); 
     MimeMessage mimeMessage = null; 
     try { 

      Store store = mailSession.getStore(); 
      store.connect("localhost", email, password); 
      Folder folder = store.getDefaultFolder(); 
      folder = folder.getFolder(folderName.toUpperCase()); 
      folder.open(Folder.READ_ONLY); 

      SearchTerm searchTerm = new MessageIDTerm(id); 
      Message[] messages = folder.search(searchTerm); 


      if (messages.length > 0) { 
       mimeMessage = (MimeMessage) messages[0]; 
      } 

      if (mimeMessage != null) { 

       Object objRef = mimeMessage.getContent(); 

       if (objRef != null) { 

        // if message content is not multipart 
        if (!(objRef instanceof Multipart)) { 

         //get message text here 
           System.out.println(mimeMessage.getContent().toString()) 
        } else { 
         Multipart multipart = (Multipart) objRef; 

         for (int i = 0; i < multipart.getCount(); i++) { 
          BodyPart bodyPart = multipart.getBodyPart(i); 
          if (bodyPart.isMimeType("text/*")) { 
           //get message text here 
           System.out.println(bodyPart.getContent() 
             .toString()) 
          } 
          if (!Part.ATTACHMENT.equalsIgnoreCase(bodyPart 
            .getDisposition())) { 
           continue; // dealing with attachments only 
          } 

          if (bodyPart.isMimeType("image/*")) { 


          } 



         } 

        } 

       } 

      } 

      folder.close(false); 
      store.close(); 
     } catch (MessagingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 

問題是,它需要很長時間才能獲取消息文本。閱讀消息文本而沒有獲取所有內容

Object objRef = mimeMessage.getContent();獲取所有內容,如果是的話有沒有什麼辦法來避免獲取所有內容

感謝您的幫助......

回答

0

而不是調用的getContent和它是否是一個多或不切換,使用mimeMessage.isMimeType (「multipart/」)和mimeMessage.isMimeType(「text/」)。請參閱msgshow.java sample program

您可以使用bodyPart.getInputStream以遞增方式讀取文本內容,而不是一次讀取文本內容,這可能有助於根據您讀取它時所做的操作。

當然,您也可以使用Folder.fetch方法預取消息元數據,以加快處理消息的其他部分。有關示例,請再次參閱msgshow.java程序。