Как я могу получить текст сообщения в виде простого текста, используя код imap и Java?

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

Мой код для получения электронной почты таков:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Properties;

import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;



public class InboxReader {

    public static void main(String args[]) throws Exception {
        Properties props = System.getProperties();
        props.setProperty("mail.store.protocol", "imaps");
            try {
                Session session = Session.getDefaultInstance(props, null);
                Store store = session.getStore("imaps");
                store.connect("imap.gmail.com", "[email protected]", "password");
                System.out.println(store);

                Folder inbox = store.getFolder("Inbox");
                inbox.open(Folder.READ_WRITE);



                BufferedReader reader = new BufferedReader (
                        new InputStreamReader(System.in));
                        // Get directory

                        Message message[] = inbox.getMessages();


                        //Message message[] = folder.getMessages();
                        for (int i=0, n=message.length; i<n; i++) 
                        {
                        System.out.println(i + ": " + message[i].getFrom()[0]
                        + "\t" + message[i].getSubject());

                        System.out.println("Do you want to read message? " +
                        "[YES to read/QUIT to end]");
                        String line = reader.readLine();
                        if ("YES".equals(line)) {
                        message[i].writeTo(System.out);
                        } else if ("QUIT".equals(line)) {
                        break;
                        }
                        }
                        }
         catch (NoSuchProviderException e) {
            e.printStackTrace();
            System.exit(1);
        } catch (MessagingException e) {
            e.printStackTrace();
            System.exit(2);
        }
    }
 }

person punit_g_rajai    schedule 04.01.2013    source источник


Ответы (2)


Это зависит от отправителя, вы получите все, что он пошлет. Как предложил Билл, ищите другой тип MimeTypes, который вы получаете в теле сообщения.
Однако, если вы уверены, что получите HTML, вы можете легко преобразовать его в plain text с помощью библиотеки JSoup. И если вы не уверены, вам сначала придется извлечь HTML из объектов MultiPart, а затем преобразовать его в обычный текст.

Пример:

Document doc = Jsoup.parse(HTMLText);

String plainText = doc.body().text();

System.out.println(plainText);  
person ThePCWizard    schedule 07.01.2013

Вы получаете то, что отправил вам отправитель. Если они прислали вам только html, вы получите только html. Во многих случаях они отправят вам составное/альтернативное сообщение, содержащее один и тот же контент как в виде обычного текста, так и в формате html. Эта часто задаваемые вопросы по JavaMail поможет вам начать работу.

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

person Bill Shannon    schedule 06.01.2013