【问题标题】:Java Mail: Only one part of the message is retrieved / Parsing error / Badly formatted mailJava 邮件:仅检索到一部分邮件/解析错误/邮件格式错误
【发布时间】:2013-07-24 09:18:53
【问题描述】:

大家好 :) 我在解析来自 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);

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

最好的问候

【问题讨论】:

    标签: java jakarta-mail pop3 multipart


    【解决方案1】:

    JavaMail 调试提示为here

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

    使用 JavaMail reference implementation 而不是您正在使用的 Geronimo(?) 版本可能会更好。

    【讨论】:

    • 非常感谢,你维护的实现就像一个魅力:) message.getContent 给了我一个字符串而不是一个多部分,但字符串完全符合我的需要。
    • @BenoitParis 你能告诉我你是如何解析从方法message.getContent返回的字符串的吗?我知道这很旧,但我在网上找不到任何东西来解决这个问题,我需要它来返回一个 Multipart 对象,或者我需要解析字符串。
    • 如果您确实有一条多部分消息并且您没有从 getContent 获取多部分对象,请发布一个包含详细信息的新问题。
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    • 2012-05-21
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多