Извлеките только текстовую часть тела электронной почты, используя javamail, без содержимого html

В моем проекте мне нужно читать почту и сохранять ее содержимое на жестком диске из почтового ящика MS Exchange с использованием javamail. Но я обнаружил, что даже самое простое электронное письмо, которое я получаю, сохраняется с html содержимым, например head body и так далее, даже когда я пишу только два слова в формате, без изображений и без вложений. Но мне нужен только текст письма.

Часть кода:

Object content = part.getContent();
if (content instanceof InputStream || content instanceof String) {
        if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition()) || 
            StringUtils.isNotBlank(part.getFileName())) {
    String messageBody = part.getContent().toString();
....(write this string to files)
    }  
}

Я могу написать:

Hello world.

И я получаю txt со всем его html-кодом, fontface и тегами вроде <html> и так далее.

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

if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {


    DataHandler handler = bodyPart.getDataHandler();

    s1 = (String) bodyPart.getContent();`

Так это про DataHandler? Но он нигде не используется? Кто-нибудь может помочь?


person WesternGun    schedule 14.07.2015    source источник


Ответы (1)


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

Но не все сообщения будут содержать как html, так и текстовую версию тела сообщения. Если вы получаете только html, вам придется написать свой собственный код для обработки строки и удаления тегов html или использовать какой-либо другой продукт для обработки html и удаления тегов.

person Bill Shannon    schedule 15.07.2015
comment
Спасибо за комментарий, но я не понимаю, почему порядок что-то значит в ссылке, которую вы разместили. И изменить порядок if - else изменения предпочтения и вывода? Можно немного больше? - person WesternGun; 15.07.2015
comment
В соответствии с RFC 2046, который определяет multipart/alternative, альтернативы появляются в порядке возрастания достоверности исходного содержимого. Это означает, что вы найдете text/plain перед text/html. Если вы предпочитаете text/plain, вы можете изменить этот код так, чтобы он возвращал значение, как только он находит text/plain контент; нет необходимости продолжать искать другие части тела. - person Bill Shannon; 16.07.2015
comment
Хорошо спасибо. Я решил получить все сообщение в формате html, потому что оно содержит больше информации. Я предпочитаю поддерживать структуру писем и не путать весь текст. - person WesternGun; 30.07.2015
comment
Наконец-то я использовал Jsoup, и он отлично работает. Хитрость в том, что вам нужно сначала удалить часть <head> вручную, а Jsoup сделает все остальное. - person WesternGun; 03.08.2015