2013-08-08 1 views
0

Java Mail API를 사용하여 IMAP (Gmail 계정)에 액세스하는 응용 프로그램이 있습니다. 첨부 파일로 .eml 파일을 포함하는 메시지를 제외하고 모든 유형의 전자 메일에 적합하며 메시지는 Thunderbird를 사용하여 전송됩니다.BODYSTRUCTURE 예외를 Thunderbird를 사용하여 보낸 .eml 파일이 포함 된 전자 메일로로드 할 수 없습니다.

메시지를 검색 할 때 스택 추적 예외가 있습니다. 제발 조언.

Caused by: com.google.code.javax.mail.MessagingException: Unable to load BODYSTRUCTURE 
     at com.google.code.com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1377) 
     at com.google.code.com.sun.mail.imap.IMAPMessage.getContentType(IMAPMessage.java:492) 

답변

2

어떤 JavaMail 버전을 사용하고 있습니까?

here에 설명 된 Gmail 버그 중 하나에 부딪혔을 수 있습니다.

+0

을 자바의 Gmail - IMAP-1.4.4-GM-EXT-0.5 .jar from https://code.google.com/p/java-gmail-imap/ –

+2

Gmail 관련 기능에 대한 지원이 포함 된 JavaMail 1.4.7 또는 1.5.0 버전으로 전환하는 것을 고려해야합니다. 이 버그가 Gmail 버그인지 여부를 분류하는 데 도움이 필요하면 [protocol trace] (http://www.oracle.com/technetwork/java/javamail/faq/index.html#debug)를 여기에 게시하거나 나 ([email protected]). –

+0

은 java-gmail-imap-1.4.4-gm-ext-0.5.jar와 호환되는 JavaMail 1.5.0입니까? 얼마만큼의 코드 변경이 필요합니까? –

2

this 방법을 사용하여 성공했습니다. 간단히 말해 MessageMimeMessage이고이 예외가 발생하면 원본 MimeMessage에서 MimeMessage의 새 인스턴스를 만들어 대신 사용하십시오. 예를 들어, 내가 메시지의 getContent() 방법을 호출 할 때이 오류를 얻고 있었다, 그래서 나는 콘텐츠를 얻을 수있는이 방법을 썼다 : 우리는 사용하는

private Object getEmailContent(Message email) throws IOException, MessagingException { 
     try { 
      return email.getContent(); 
     } catch (MessagingException e) { 
      // handling the bug 
      if (email instanceof MimeMessage && "Unable to load BODYSTRUCTURE".equalsIgnoreCase(e.getMessage())) { 
       return new MimeMessage((MimeMessage) email).getContent(); 
      } else { 
       throw e; 
      } 
     } 
    } 
+0

또한 메시지가 디지털 서명 된 경우 message.getContentType()에서도 동일한 예외가 발생했습니다. IMAP 서버는 Exchange 2007이었습니다. javaMail 1.5.4 버전을 사용하고 있습니다. –

관련 문제