2013-01-04 34 views
1

我正在開發這樣一個可以正確發送電子郵件的應用程序。 但在獲取電子郵件時,我正在收到html編碼的郵件正文。但是我希望郵件正文爲純文本類型。 所以請指導我。如何使用imap和Java代碼獲取純文本消息正文?

我接收電子郵件的代碼是:

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); 
     } 
    } 
} 

回答

0

你會得到什麼發件人發送給您。如果他們只發送給你html,你只能得到html。在許多情況下,他們會向您發送包含純文本和html版本中相同內容的多部分/替代郵件。這JavaMail FAQ entry會讓你開始。

但是,該消息只包含html內容,並且您想要純文本,您將不得不親自處理html內容並嘗試將其轉換爲純文本。根據你想要做的工作有多好,這要麼相對容易,要麼非常困難。

2

這取決於發件人,您將收到他發送的任何內容。正如比爾建議尋找不同類型的MimeTypes你在消息正文。
但是,如果您確定會收到HTML,則可以使用JSoup庫輕鬆將其轉換爲plain text。如果不確定,您首先必須從MultiPart對象中提取HTML,然後將其轉換爲純文本。

實施例:

Document doc = Jsoup.parse(HTMLText); 

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

System.out.println(plainText);