【问题标题】:MimeMultipart message dump with boundaries带边界的 MimeMultipart 消息转储
【发布时间】:2019-10-20 04:22:12
【问题描述】:

我正在尝试使用如下代码记录 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);

但这看起来只是 MimeMultipart 消息的内容,而不是原始消息(缺少边界和标题)。

我也试过了

msg.writeTo(outStream);
String content = outStream.toString();

但由于某种原因,它只是转储主消息标题,但没有包含多部分标题的正文部分,看起来像

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

我做错了什么?

【问题讨论】:

    标签: java jakarta-mail mime multipart


    【解决方案1】:

    只需使用msg.writeTo(outStream);

    【讨论】:

    • 我以前做过,但由于某种原因,它只是转储主消息标题,但没有包含多部分标题的正文部分。
    • 给我看。您使用的是什么版本的 JavaMail?
    • JavaMail 1.4.3 我已经用原始消息转储更新了 OP
    • 1.4.3 已经快 10 年了,尽管我认为这不是您问题的根源。不过,您可能希望升级到 1.6.3。您能否包括一个重现问题的小程序以及JavaMail debug output?谢谢。
    • 我主要想看看你用来写出消息和调试输出的代码。可能是 Apache James IMAP 服务器没有返回正确的数据。
    【解决方案2】:

    请看看这个https://stackoverflow.com/a/34689614/578855

    似乎 MimeMultiPart 可以具有本身为 MimeMultiPart 的主体部分,因此您必须递归读取内容。

    【讨论】:

    • 但我想我应该看到所有部分(标题和相关内容)当我会做msg.writeTo(outStream);
    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2015-05-09
    • 2014-09-14
    • 2012-10-25
    • 1970-01-01
    相关资源
    最近更新 更多