2012-11-20 61 views
14

行,所以我用.getcontent和接收[email protected]閱讀正文部分

我知道我需要這樣的事情在我的代碼,但我不知道到底是什麼需要。

if (p.isMimeType("text/plain")) { 
    pr("This is plain text"); 
    pr("---------------------------"); 
    if (!showStructure && !saveAttachments) 
    System.out.println((String)p.getContent()); 
} else if (p.isMimeType("multipart/*")) { 
    pr("This is a Multipart"); 
    pr("---------------------------"); 
    Multipart mp = (Multipart)p.getContent(); 
    level++; 
    int count = mp.getCount(); 
    for (int i = 0; i < count; i++) 
    dumpPart(mp.getBodyPart(i)); 
    level--; 
} else if (p.isMimeType("message/rfc822")) { 
    pr("This is a Nested Message"); 
    pr("---------------------------"); 
    level++; 
    dumpPart((Part)p.getContent()); 
    level--; 

此刻我試圖把所有的信息中ASTRING,然後在此刻顯示了在GUI我擁有了一切工作正常欄中的主體內容被顯示爲。 [email protected]。任何幫助將非常讚賞,因爲我相當堅持。

package EmailTable; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.IOException; 
import java.util.List; 
import java.util.Properties; 

import javax.activation.DataHandler; 
import javax.mail.BodyPart; 
import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Multipart; 
import javax.mail.Session; 
import javax.mail.Store; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 



public class Email implements ActionListener 
{ 

private mail mail; 
private List mails; 
private String password; 
private String user; 
private String getText; 
private boolean textIsHtml = false; 

public Email(List mails,String password,String user) throws MessagingException,  IOException { 

password = "password"; 
user = "user"; 
this.mails = mails; 
String host = "10..10.10.10"; 
    Properties properties = System.getProperties(); 
    Session session = Session.getDefaultInstance(properties); 
    Store store = session.getStore("pop3"); 
    store.connect(host, user, password); 
    Folder folder = store.getFolder("inbox"); 
    folder.open(Folder.READ_ONLY); 
    Message[] messages = folder.getMessages(); 

    int length = messages.length-1; 
    for (int i = length; i > length-30; i--) { 

      mail = new mail(); 

      mail.setEmail(messages[i].getFrom()[0]); 

       String to = InternetAddress.toString(
           messages[i].getRecipients(Message.RecipientType.TO)); 
         if (to != null) { 
          mail.setEmail2(to); 
         } 

      mail.setSubject(messages[i].getSubject()); 

      mail.setDate(messages[i].getSentDate()); 

      mail.setMessage(messages[i]); 

      mail.setContent(((MimeMessage)messages[i]).getContent()); 



      Email.this.mails.add(mail); 
    } 

} 

public void actionPerformed(ActionEvent e) { 
// TODO Auto-generated method stub 

} 
} 
+1

請參閱本以及http://stackoverflow.com/questions/5628395/javamail-parsing-email-content-cant -seem-to-get-it-to-work-message-getcont/26142591#26142591 – NoNaMe

回答

7

是的,你必須遍歷每個BodyPart知道它的類型,然後相應地獲取內容。以下是我用來獲取消息內容的內容。但是我仍然無法爲某些消息獲得正確的內容。
編輯
實施比爾建議的代碼後工作更好。

Object msgContent = messages[i].getContent(); 

    String content = "";    

    /* Check if content is pure text/html or in parts */      
    if (msgContent instanceof Multipart) { 

     Multipart multipart = (Multipart) msgContent; 

     Log.e("BodyPart", "MultiPartCount: "+multipart.getCount()); 

     for (int j = 0; j < multipart.getCount(); j++) { 

      BodyPart bodyPart = multipart.getBodyPart(j); 

      String disposition = bodyPart.getDisposition(); 

      if (disposition != null && (disposition.equalsIgnoreCase("ATTACHMENT"))) { 
       System.out.println("Mail have some attachment"); 

       DataHandler handler = bodyPart.getDataHandler(); 
       System.out.println("file name : " + handler.getName());         
      } 
      else { 
        content = getText(bodyPart); // the changed code   
      } 
     } 
    } 
    else     
     content= messages[i].getContent().toString(); 
+0

我已經看過那個,我不明白它的意思是什麼意思就像是P來自等等。 – J0rd4n500

+0

p是部分/ bodypart對象,你將不得不傳遞給方法,以獲取內容。看到我編輯的答案,特別是'else'語句 – ThePCWizard

4

這個解決方案對我來說效果更好。我只是想記錄我的電子郵件信息,以便進行開發/測試。使用MimeMessage.writeTo(OutputStream)方法。

void logMimeMessage(MimeMessage msg) throws MessagingException { 
    ByteArrayOutputStream out = new ByteArrayOutputStream(); 
    try { 
     msg.writeTo(out); 
    } catch (IOException e) { 
     logger.catching(new MyException("Cannot log MimeMessage",e)); 
    } 
    logger.error(out.toString()); 
} 

多虧了@zzzzz上面的評論,誰鏈接到這個答案JavaMail - Parsing email content, can't seem to get it to work! (Message.getContent())