2012-05-02 5 views
2

javamail api를 사용하여받은 편지함 폴더에서 읽지 않은 메시지를 가져 오는 중 Message.getContentType()으로 전화 할 때 이상한 콘텐츠 유형 'multipart/alternative'이 발생합니다.
또한 내가 클래스 Multipart에 (Object에서) 메시지의 내용을 캐스팅 할 때 난 그냥 이메일의 콘텐츠를하고 DB에 저장하려는

Exception in thread "main" java.lang.classCastException: com.sun.mail.imap.IMAPInputStream cannot be cast to javax.mail.Multipart at............'multipart/alternative'구문 분석 콘텐츠 유형

예외를 얻을.

 subject = messages[j].getSubject();         
     System.out.println(messages[j].getContentType()); 
     if(messages[j].getContent() instanceof Multipart) 
     {         
      Multipart mime = (Multipart) messages[j].getContent(); 

      for (int i = 0; i < mime.getCount(); i++) 
      { 
       BodyPart part = mime.getBodyPart(i); 
       content += part.getContent().toString(); 
      } 
     } 

감사합니다.

+0

[첨부 파일이있는 Java 메일 : ClassCastException (javax.mail.Multipart)] 가능한 복제본 (http://stackoverflow.com/questions/4594206/java-mail-with-attachment-classcastexception-on-javax-mail-multipart)) – artbristol

+0

나는 방금 내 대답을 게시했습니다 - [여기] (http://stackoverflow.com/a/15729766/1102014). – Stan

답변

0

아마도 here과 동일한 문제가 발생하고 있습니다.

multipart/alternative는 here과 같이 완벽하게 일반적인 유형입니다.

0

멀티 플레이트/대안은 이상하지 않습니다. 실제로, 그것은 매우 일반적입니다. 일반적으로 전자 메일 클라이언트에서 동일한 메시지 (일반 텍스트 및 HTML 중 하나)의 두 버전을 만드는 데 사용됩니다. 자신의 헤더를 검사

MIME-Version: 1.0 
Content-Type: multipart/alternative; boundary=some-boundary 

둘째, 그것은 다른 신체 부위의 각을 분석해야한다 : 첫째, 이메일 클라이언트는 메시지는 헤더 섹션에이 헤더를 찾아 할 수있는 다중/대안임을 인식해야한다 어느 하나 (또는 ​​그들)가 처리하고 싶어하는지 확인한 다음 그렇게하십시오.

--some-boundary 
Content-Type: text/plain 

...The plain text version of the email goes here... 

--some-boundary 
Content-Type: text/html 

<html>...The html version of the content goes here...</html> 

--some-boundary-- 
0

Android JavaMail을 사용하여 메시지 첨부 파일을 읽는 동안 비슷한 문제가 발생했습니다. 다음 오류 코드를 추가하여이 오류를 해결했습니다. MailCap에 문제가 있습니다. javamail은 multipart/mixed 부분에 대한 핸들러를 찾을 수 없기 때문에이 비트를 추가해야합니다. 이 문제가 해결되었습니다. 누군가가 도움이되기를 바랍니다.

MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
CommandMap.setDefaultCommandMap(mc); 

건배!