2009-12-17 4 views
6

javax.mail API를 사용하여 IMAP 전자 메일 클라이언트를 개발하려고합니다. 문제없이 이메일, 첨부 파일 및 기타 작업을 가져와 서버에 연결할 수있었습니다.IMAP - javax.mail. - 첨부 파일이없는 본체 만 가져 오기

그러나 성능 향상을 위해 사용자가보기를 바라기 전까지는 첨부 파일을 가져 오지 않을 것입니다. 즉, 이메일에 첨부 파일이 있는지 여부를 나타내는 정보 (예 : 파일 이름 및 크기)가 필요하지만 이 아닌 경우은 내게 이메일의 실제 내용을 보내야 함을 의미합니다. 그러나 API 설명에서 다중 부분 콘텐츠 만 반환하는 메소드를 찾을 수 없었습니다.

본문과 첨부 파일의 세부 사항을 가져올 수 있지만 실제 첨부 파일을 가져올 수있는 방법이 있습니까?

감사합니다, 라빈

답변

2

방법 getContent()javax.Part의 반환

내용을 Java 오브젝트로서

. 반환 된 객체의 유형은 물론 내용 자체에 따라 입니다. 예제의 경우 "text/plain"내용에 대해 반환 된 객체는 일반적으로 String 객체입니다. "멀티 파트"콘텐츠에 대해 반환 된 개체는 항상 Multipart 하위 클래스입니다.

의 (a Part 임) Message 첨부 파일이 포함 된 경우 http://download.oracle.com/javaee/6/api/javax/mail/Part.html#getContent%28%29

이의의 getContent 메소드가 Multipart 개체를 반환집니다. 또한 getContentType으로 파트의 MIME 유형을 알 수 있습니다.

설명서에서 누락 된 정보는이 개체가 반환 한 getContent이 Message의 구조를 단지 비어있는 것입니다. Multipart의 각 Part의 콘텐츠는 특별히 요청할 때만 서버에서 가져올 수 있습니다. 고려해야 할 다른

if(p.isMimeType("multipart/*")) { 

    Multipart mp = (Multipart)p.getContent(); 
    // the content was not fetched from the server 

    // parse each Part 
    for (int i = 0; i < mp.getCount(); i++) { 
     Part inner_part = mp.getBodyPart(i) 

     if(inner_part.isMimeType("text/plain")) { 
      String text = inner_part.getText(); 
      // the content of this Part was fetched from the server 
     } 
    } 
} 

뭔가가 최적의 성능을 위해 당신이 (당신이 구문 분석 할 메시지의 컬렉션에 대한 일괄 서버에서 신체 구조 정보를 얻을해야한다는 것입니다 : 예를 들어, 다중 Message 당신이 할 것입니다 구문 분석 http://download.oracle.com/javaee/6/api/javax/mail/FetchProfile.Item.html#CONTENT_INFO 참조). 그렇지 않다면, 각

Multipart mp = (Multipart)p.getContent();

는 구조체를 페치하는 서버로 요청 될 것이다. FetchProfile 접근 방식을 사용하는 경우 메시지 수집의 본문 구조는 하나의 요청으로 만 가져옵니다.

session.setDebug(true); 

이 말했다, 크기 및 첨부 파일의 파일 이름은 단지 Part.getSize()Part.getFileName() 각각 사용 얻을 : 당신이 세션에서 디버그 모드를 활성화하면 당신은 로그 서버로 요청을 볼 수 있습니다.