1

我正在开发这样一个可以正确发送电子邮件的应用程序。但是在获取电子邮件期间,我得到了 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", "emailId@gmail.com", "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);
        }
    }
 }
4

2 回答 2

3

这取决于发件人,您将收到他发送的任何内容。正如比尔建议的那样,在消息正文中寻找不同类型的MimeTypes你。
但是,如果您确定会收到HTML,则可以plain text使用 JSoup 库轻松地将其转换为。如果不确定,您首先必须从 MultiPart 对象中提取 HTML,然后将其转换为纯文本。

例子:

Document doc = Jsoup.parse(HTMLText);

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

System.out.println(plainText);  
于 2013-01-07T06:44:19.770 回答
0

您会收到发件人发送给您的内容。如果他们只给你发送 html,你只会得到 html。在许多情况下,他们会向您发送多部分/替代消息,其中包含纯文本和 html 版本的相同内容。此JavaMail FAQ 条目将帮助您入门。

但是,如果消息只包含 html 内容并且您想要纯文本,您将不得不自己处理 html 内容并尝试将其转换为纯文本。根据你想做的工作有多好,这要么相对容易,要么非常非常困难。

于 2013-01-06T09:55:42.480 回答