Java Mail:只检索邮件的一部分/解析错误/格式错误的邮件

时间:2013-07-24 09:18:54

标签: java javamail pop3 multipart

大家好:)我从pop3服务器解析邮件时遇到了麻烦。最后我想得到附件。邮件是多部分的,但到目前为止我只收到了一小部分邮件。

这是原始电子邮件,由outlook读取(+附加一个文件):

ID-G1619161

P.S. : This is an automated email.
 Write back to blah@blah.com

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 : org.apache.geronimo.javamail.store.pop3.message.POP3Message@79f6f296
***

P.S. : This is an automated email.***
message.getContentType : multipart/mixed; boundary="qMm9M+Fa2AknHoGS"
multiPart : javax.mail.internet.MimeMultipart@bc92535

并抛出A行(multiPart.getCount!):

javax.mail.MessagingException: Unexpected response:  Write back to blah@blah.com

我对此的看法是,邮件的格式是奇怪的,javax.mail无法识别,因为getCount正在尝试读取邮件的其余部分。

我甚至可以得到整个信息! (尝试在IOUtils.copy(message.getInputStream(),System.out);

执行此操作

你会如何调试这个?此外,如果你知道一种方法将整个邮件作为字符串(包括附件),我很高兴你分享它。我准备手工解析这个。

祝你好运

1 个答案:

答案 0 :(得分:1)

JavaMail调试技巧是here

您可以使用Message.writeTo方法获取整个消息文本。将其写入FileOutputStream或ByteArrayOutputStream。

使用JavaMail reference implementation代替您正在使用的Geronimo(?)版本可能会更好运。