2012-11-20 28 views
14

ok vì vậy tôi sử dụng .getcontent và nhận [email protected], vvđọc phần cơ thể của một kịch câm nhiều phần dữ liệu

Tôi biết tôi cần một cái gì đó như thế này trong mã của tôi nhưng tôi không biết những gì chính xác là cần thiết.

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

vào lúc tôi đang cố gắng để đưa tất cả các thông tin trong để astring mà sau đó được hiển thị lên trên một giao diện vào lúc này tôi có nó tất cả làm việc thanh tốt các nội dung cơ thể được hiển thị như. [email protected] bất kỳ trợ giúp sẽ được nhiều đánh giá cao như im khá khó khăn.

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

Xem này cũng http://stackoverflow.com/questions/5628395/javamail-parsing-email-content-cant -seem-to-get-it-to-work-message-getcont/26142591 # 26142591 – NoNaMe

Trả lời

7

Có, bạn phải lặp qua từng BodyPart để biết đó là loại và sau đó nhận nội dung phù hợp. Đây là những gì tôi sử dụng để có được nội dung của một tin nhắn. Nhưng tôi vẫn không thể có được nội dung phù hợp cho một số tin nhắn. Đã chỉnh sửa
Hoạt động tốt hơn sau khi triển khai mã do Bill đề xuất.

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

Tôi đã xem xét điều đó và tôi không hiểu một nửa ý nghĩa của nó là P đã đến từ v.v. – J0rd4n500

+0

p là Phần/đối tượng bodypart mà bạn sẽ phải chuyển sang phương thức, để lấy nội dung ra khỏi nó. Xem câu trả lời đã chỉnh sửa của tôi, đặc biệt là câu lệnh 'else' – ThePCWizard

4

Giải pháp này hiệu quả hơn rất nhiều đối với tôi. Tôi chỉ muốn đăng nhập thông điệp email của tôi cho mục đích phát triển/thử nghiệm. Sử dụng phương thức 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()); 
} 

Nhờ những nhận xét của @zzzzz trên, người có liên quan đến câu trả lời này JavaMail - Parsing email content, can't seem to get it to work! (Message.getContent())