2013-07-24 39 views
0

大家好:)我有解決郵件從POP3服務器的麻煩。最後我想獲得附件。郵件是多部分的,但到目前爲止,我只設法獲得一小部分郵件。Java郵件:只檢索郵件的一部分/解析錯誤/格式錯誤的郵件

這裏是原始電子郵件,如由前景(+一個文件附後)讀:

ID-G1619161 

P.S. : This is an automated email. 
Write back to [email protected] 

Post-scriptum : 

This message is confidential. [...] 

下面是一些代碼:

inbox.open(Folder.READ_ONLY); 
Message[] messages = inbox.getMessages(); 

for (int i = 0; i < messages.length; i++) { 

    Message message = messages[i]; 
    System.out.println("message : " + message); 
    System.out.println("***"); 
    IOUtils.copy(message.getInputStream(),System.out); 
    System.out.println("***");    
    System.out.println("message.getContentType : " + message.getContentType()); 
    Multipart multiPart = (Multipart) message.getContent(); 
    System.out.println("multiPart : " + multiPart); 
    int numberOfParts = multiPart.getCount(); // line A 
} 

此打印:

message : [email protected]f296 
*** 

P.S. : This is an automated email.*** 
message.getContentType : multipart/mixed; boundary="qMm9M+Fa2AknHoGS" 
multiPart : [email protected] 

並投在A行(multiPart.getCount!):

javax.mail.MessagingException: Unexpected response: Write back to [email protected] 

我對此的看法是郵件被格式化爲一種奇怪的方式,javax.mail未識別,因爲getCount正在嘗試讀取其餘郵件。

我甚至可以得到整個消息! (試圖做到這一點:IOUtils.copy(message.getInputStream(),System.out);

你會如何調試?另外,如果您知道一種方式將整個郵件作爲字符串(包括附件),我很樂意與您分享。我準備手工解析這個問題。

問候

回答

1

JavaMail的調試技巧是here

您可以使用Message.writeTo方法獲取整個消息文本。將它寫入FileOutputStream或ByteArrayOutputStream。

使用JavaMail reference implementation代替正在使用的Geronimo(?)版本可能會帶來更好的運氣。

+0

非常感謝,您維護的實現像一個魅力:) message.getContent給了我一個字符串,而不是一個多部分,但字符串完全符合我所需要的。 – BenoitParis

+0

@BenoitParis你能告訴我你是如何解析從'message.getContent'方法返回的字符串的?我知道這是舊的,但我無法找到任何網絡上解決這個問題,我需要它返回一個Multipart對象,或者我需要解析字符串。 – Shahe

+0

如果您確實有多部分信息,並且沒有從getContent獲取Multipart對象,請發佈一個包含詳細信息的新問題。 –