Java 带边界的MimeMultipart消息转储

Java 带边界的MimeMultipart消息转储,java,jakarta-mail,mime,multipart,Java,Jakarta Mail,Mime,Multipart,我正在尝试使用如下代码记录MimeMultipart消息 MimeMultipart mimeMultipart = null; try { mimeMultipart = (MimeMultipart) msg.getContent(); } catch (IOException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } ByteArrayOutpu

我正在尝试使用如下代码记录MimeMultipart消息

MimeMultipart mimeMultipart = null;
try {
    mimeMultipart = (MimeMultipart) msg.getContent();
} catch (IOException e) {
    e.printStackTrace();
} catch (MessagingException e) {
    e.printStackTrace();
}
ByteArrayOutputStream outStream = new ByteArrayOutputStream();

for (int i = 0; i < mimeMultipart.getCount(); i++) {
    BodyPart bodyPart = mimeMultipart.getBodyPart(i);
    String contentType = bodyPart.getContentType();
    bodyPart.writeTo(outStream);
}

outStream.flush();
String content = new String(outStream.toByteArray());
LOGGER.info("Raw message: \r\n" + content);
Date: Fri, 31 May 2019 14:19:36 -0400 (EDT)
From: postmaster@dev.box.local
To: user@dev.box.local
Message-ID: <1293434275.167.1559326776862.JavaMail@devbox>
In-Reply-To: <984954674.27.1559326769277.JavaMail@devbox>
Subject: Re:
MIME-Version: 1.0
Content-Type: multipart/report;
  boundary="----=_Part_166_602016356.1559326776861";
  report-type=delivery-status
但由于某些原因,它只转储主消息头,而没有包含多部分头的正文部分,看起来像

MimeMultipart mimeMultipart = null;
try {
    mimeMultipart = (MimeMultipart) msg.getContent();
} catch (IOException e) {
    e.printStackTrace();
} catch (MessagingException e) {
    e.printStackTrace();
}
ByteArrayOutputStream outStream = new ByteArrayOutputStream();

for (int i = 0; i < mimeMultipart.getCount(); i++) {
    BodyPart bodyPart = mimeMultipart.getBodyPart(i);
    String contentType = bodyPart.getContentType();
    bodyPart.writeTo(outStream);
}

outStream.flush();
String content = new String(outStream.toByteArray());
LOGGER.info("Raw message: \r\n" + content);
Date: Fri, 31 May 2019 14:19:36 -0400 (EDT)
From: postmaster@dev.box.local
To: user@dev.box.local
Message-ID: <1293434275.167.1559326776862.JavaMail@devbox>
In-Reply-To: <984954674.27.1559326769277.JavaMail@devbox>
Subject: Re:
MIME-Version: 1.0
Content-Type: multipart/report;
  boundary="----=_Part_166_602016356.1559326776861";
  report-type=delivery-status
日期:2019年5月31日星期五14:19:36-0400(美国东部时间)
发件人:postmaster@dev.box.local
致:user@dev.box.local
消息ID:
答复:
主题:Re:
MIME版本:1.0
内容类型:多部分/报表;
boundary=“---=_Part_166_602016356.1559326776861”;
报告类型=交付状态

我做错了什么?

只需使用
msg.writeTo(扩展)

请看一下这个


似乎MimeMultiPart可以包含本身就是MimeMultiPart的主体部分,因此您必须递归地读取内容。

我以前已经这样做过,但出于某种原因,它只转储主消息头,而不转储包含多部分标题的主体部分。演示。您使用的是什么版本的JavaMail?JavaMail 1.4.3和我已经用原始消息更新了OP dump1.4.3已经快10年了,尽管我不认为这是您问题的根源。不过,您可能需要升级到1.6.3。你能包括一个再现问题的小程序吗?谢谢。我主要想看看你用来写消息和调试输出的代码。可能是Apache James IMAP服务器没有返回正确的数据,但我想我应该在执行
msg.writeTo(扩展)时查看所有部分(标题和相关内容)