Java邮件: Only one part of the message is retrieved/Parsing error/Badly formatted mail

标签 java jakarta-mail 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);)

你会如何调试这个?另外,如果您知道如何以字符串形式获取整个邮件(包括附件),我会很高兴您分享它。我准备手动解析它。

致以诚挚的问候

最佳答案

JavaMail 调试技巧为here .

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

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

关于Java邮件: Only one part of the message is retrieved/Parsing error/Badly formatted mail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17829885/

相关文章:

java - 在java中使用CP1252编码解码Inputsteam

javascript - Javascript 中的 POP3/IMAP 直接实现

jakarta-mail - 如何从pop3协议(protocol)的UID获取邮件

java - 如何使用 Json.simple 解析 Java 中的 JSONArray?

java - Android 设备中的运行时错误

java - 为什么我的 key 标识符不匹配?

JavaMail 无效的 MSGID

java - Domino 10 有时无法在 Java 下解码 MIME header

java - 强制 javamailsender 进行身份验证

ruby-on-rails - 使用 Rails 中的 mailman gem 接收来自多个帐户的电子邮件