MimeBodyPart не имеет контента, когда он должен - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь получить составное содержание электронного письма. Проблема в том, что, когда я пытаюсь получить разные составные тела, я получаю ошибочный результат. Вот что я имею в виду:

Вот оригинальное сообщение, которое состоит только из 2 частей, вторая из которых является изображением:

...


<p>&nbsp;</p>
<p>&nbsp;</p>
</blockquote></div>



--000000000000e3fe69059fe15753--



--000000000000e3fe6b059fe15754

Content-Type: image/png; name="=?UTF-8?B?dGVzdC1kZS1lc3Ryw6lzLnBuZw==?="

Content-Disposition: inline; filename="=?UTF-8?B?dGVzdC1kZS1lc3Ryw6lzLnBuZw==?="

Content-Transfer-Encoding: base64

Content-ID: <ii_k7anlnni0>

X-Attachment-Id: ii_k7anlnni0



iVBORw0KGgoAAAANSUhEUgAAAzMAAALQCAMAAACT0t4cAAAC+lBMVEVHcEwAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC

...

Когда я пытаюсь получить это сообщение в Java, с помощью следующего метода:

protected void getCIDAttachments(Message message) {

    MimeMultipart mimeMultipart = (MimeMultipart) message.getDataHandler().getContent();

}

Мой mimeMultipart состоит из 2 частей, первая из которых имеет тип

multipart/alternative; boundary=000000000000e3fe69059fe15753

, что является правильным. Для второго я получаю этот тип:

image/png; name="=?UTF-8?B?dGVzdC1kZS1lc3Ryw6lzLnBuZw==?="

, который я не знаю, если это правильно, но я предполагаю, что это так. Однако, когда я пытаюсь получить Content-ID, сохраненный в заголовках, он не работает. Мой метод говорит, что это условие ложно для второго элемента

MimeBodyPart part = mimeMultiPart.getBodyPart(i);

if (part.getDataHandler() != null && part.getDataHandler().getContent() != null && part.getDataHandler().getContent() instanceof MimeMultipart) {

, что не должно быть возможным, так как вы можете ясно видеть, что часть содержит содержимое в исходном сообщении. Почему это происходит и как я могу это решить?

Кстати, этот метод отлично работает, когда я получаю сообщение от Thunderbird, но не когда я получаю сообщение от клиента Gmail, даже если исходные сообщения почти идентичные

Редактировать: остановка - это условие «part.getDataHandler (). getContent () instanceof MimeMultiPart». Правка 2: part.getDataHandler (). getContent () - это BASE64DecoderStream. Как я могу работать с этим или преобразовать его во что-то, что я могу использовать для этой цели?

...