如何使用imap和Java代码获取纯文本消息体?

时间:2013-01-04 14:08:31

标签: email javamail gmail-imap

我正在开发这样一款能够正确发送电子邮件的应用。 但在获取电子邮件期间我得到了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);
        }
    }
 }

2 个答案:

答案 0 :(得分:2)

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

示例:

Document doc = Jsoup.parse(HTMLText);

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

System.out.println(plainText);  

答案 1 :(得分:0)

您可以获得发件人发送给您的内容。如果他们只发送了你的HTML,你只能获得HTML。在许多情况下,他们会向您发送包含纯文本和html版本中相同内容的多部分/替代消息。这个JavaMail FAQ entry将帮助您入门。

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