2012-10-20 40 views
5

Tôi đang cố gắng đọc tin nhắn của mình, tôi có thể làm cho nó in tiêu đề nhưng từ và nội dung được hiển thị vui nhộn. Đây là mã tôi đang sử dụng để hiển thị các thông điệp:JavaMail kiểm tra nội dung tin nhắn gmail IMAP

int j = message.length-1; 
    for (int i=j;i>=0;i--) { 
     System.out.println("Message " + (i + 1)); 
     System.out.println("From : " + message[i].getFrom()); 
     System.out.println("Subject : " + message[i].getSubject()); 
     try { 
      System.out.println("Body: " + message[i].getContent()); 
     } catch (IOException ex) { 
      System.out.println(ex); 
     } 
    } 

Kết quả như sau:

Message 1: 
From: [javax.mail.internet.InternetAddress;@175831e] 
Subject: Hello //This is correct 
Body: [email protected] 

Tại sao không in này ra địa chỉ email thực tế cho từ tuyên bố? Và tại sao nó không in ra nội dung cơ thể thực tế? (Tôi chỉ thú vị trong văn bản đơn giản.)

Tổng số các mã:

import javax.mail.*; 
import javax.mail.internet.*; 
import javax.mail.search.*; 
import java.util.*; 
import com.sun.mail.imap.*; 
import java.io.*; 

public class MailClient { 
public static void main(String[] args) { 
    try { 
    Properties props = new Properties(); 
    props.put("mail.store.protocol","imaps"); 

    Session session; 

    session = Session.getDefaultInstance(props, null); 
    Store store = session.getStore("imaps"); 
    store.connect("imap.gmail.com","[email protected]","password"); 

    IMAPFolder folder = (IMAPFolder) store.getFolder("inbox"); 
    folder.open(Folder.READ_ONLY); 

    Flags seen = new Flags(Flags.Flag.SEEN); 
    FlagTerm unseenFlagTerm = new FlagTerm(seen,false); 
    Message message[] = folder.search(unseenFlagTerm); 


    int j = message.length-1; 
    for (int i=j;i>=0;i--) { 
     System.out.println("Message " + (i + 1)); 
     System.out.println("From : " + message[i].getFrom()); 
     System.out.println("Subject : " + message[i].getSubject()); 
     try { 
      System.out.println("Body: " + message[i].getContent()); 
     } catch (IOException ex) { 
      System.out.println(ex); 
     } 
    }  
    System.out.println(newMsg); 

    folder.close(false); 
    store.close(); 
    } 
    catch (MessagingException e) { 
     System.out.println("Error: " + e); 
    } 
} 
} 

Cảm ơn!

+1

Bởi vì 'getFrom' không trả về một String? Không bao giờ sử dụng API này, có vẻ như nó trả về một InternetAddress (có thể) có một số người truy cập để có được tên đầy đủ và địa chỉ email. –

Trả lời

7

Đối với đồng bằng tin nhắn văn bản và html:

String content= messages[i].getContent().toString();

Đối với tin nhắn Multipart:

Multipart multipart = (Multipart) messages[i].getContent(); 

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

     BodyPart bodyPart = multipart.getBodyPart(j); 

     String disposition = bodyPart.getDisposition(); 

      if (disposition != null && (disposition.equalsIgnoreCase("ATTACHMENT"))) { // BodyPart.ATTACHMENT doesn't work for gmail 
       System.out.println("Mail have some attachment"); 

       DataHandler handler = bodyPart.getDataHandler(); 
       System.out.println("file name : " + handler.getName());         
      } 
      else { 
       System.out.println("Body: "+bodyPart.getContent()); 
       content= bodyPart.getContent().toString(); 
      } 
2

thay đổi này

message[i].getFrom() 

để

message[i].getFrom()[0].toString()) 
+0

Làm thế nào về cơ thể? Sử dụng message.getContent() không trả về phần thân. – eatonphil

0

Cố gắng sử dụng tiếp theo:

message[i].writeTo(System.out); 
Các vấn đề liên quan