2013-12-08 1 views
0

MailEnable을 사용하여 POP3 메일 서버를 설정했습니다. Mozilla Thunderbird를 사용하여이 서버를 통해 전자 메일을 보내고받을 수 있지만 JavaMail API를 통해 다중 컨텐츠 (이 경우 HTML 컨텐츠가있는 메일)를 읽을 때 이상한 문제가 발생합니다. 입력 스트림에서 반환 된 데이터는 항상 마침표가있는 두 개의 CR/LF입니다.JavaMail을 통해 POP3 메시지를 읽는 것은 콘텐츠가 아닌 마침표 만 반환합니다.

for (Message m : messages) { 
    if (m.isMimeType("multipart/*")) { 
     System.out.println("Process multipart/* Nachricht"); 
     Multipart mp = (Multipart) m.getContent(); 
     Part part = mp.getBodyPart(0); 
     System.out.println(part.getContent()); 
    } 
} 

하나의 여러 부분이있다, 그래서 내가 직접 첫 번째 요소에 액세스 : 다음은 내 메시지 처리 코드의 관련 부분이다. 또한 중첩 된 부분은 Multipart에 없습니다. 어떤 문제가 발생했는지 알지 못해 일주일 동안 미칠 지경입니다. 누군가이 문제에 대해 저를 도울 수 있다면 매우 행복 할 것입니다.

감사합니다, fredddmadison 대신에 나는 또한이

mp.writeTo(System.out);    // Use the optimized write. 
System.out.flush();     // Flush the outputstream. 

을 시도하는 제안이

Part part = mp.getBodyPart(0);   // What if there's more parts? Or empty parts? 
System.out.println(part.getContent()); // No check for empty String? 

+0

[getCount()] (http://docs.oracle.com/javaee/6/api/javax/mail/Multipart.html#getCount%28%29)를 확인 했습니까? –

+0

예, getCount()는 1을 반환합니다. –

답변

0

문제점을 발견했습니다. 그것은 클래스 패스에 JavaMail API의 두 가지 구현이 있었기 때문에 (EclipseLink 및 JavaMail API 참조 구현 1.5.1에 ​​포함 된 apache geronimo 1.4). 나는 classpath에서 제로니모 구현을 제거했다. 그리고 예상대로 작동한다.

1

, 당신은 당신이 빈 메시지를받을 수없는 확신?

+0

제안 내용을 시도했지만 메시지 내용의 일부 데이터를 반환하지만 마지막 부분 만 반환합니다. 스트림이 전체 내용을 읽지 못하는 것 같지만 오류 메시지가 표시되지 않습니다. Windows 프롬프트에서 텔넷을 사용하면 전체 메시지가 표시되지만 JavaMail은 실패합니다! 그게 나를 혼란스럽게 해요. ... –

+0

0 표 닫기 \t 나는이 문제를 발견했다. 그것은 클래스 패스에 JavaMail API의 두 가지 구현이 있었기 때문에 (EclipseLink 및 JavaMail API 참조 구현 1.5.1에 ​​포함 된 apache geronimo 1.4). 나는 classpath에서 제로니모 구현을 제거했다. 그리고 예상대로 작동한다. –

관련 문제