Я пытаюсь получить составное содержание электронного письма. Проблема в том, что, когда я пытаюсь получить разные составные тела, я получаю ошибочный результат. Вот что я имею в виду:
Вот оригинальное сообщение, которое состоит только из 2 частей, вторая из которых является изображением:
...
<p> </p>
<p> </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. Как я могу работать с этим или преобразовать его во что-то, что я могу использовать для этой цели?