2012-10-20 10 views
5

मैं अपने संदेशों को पढ़ने की कोशिश कर रहा हूं, मैं इसे हेडर प्रिंट करने के लिए प्राप्त कर सकता हूं लेकिन से और सामग्री मजेदार दिखाई देती है।जावामेल चेक संदेश सामग्री जीमेल आईएमएपी

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

उत्पादन इस प्रकार है के रूप में: यहाँ कोड मैं संदेशों को प्रदर्शित करने का उपयोग कर रहा है

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

क्यों इस प्रिंट नाबाद बयान से के लिए वास्तविक ईमेल पता है? और यह वास्तविक शरीर की सामग्री क्यों मुद्रित नहीं करता है? (मैं सादे पाठ में केवल दिलचस्प रहा हूँ।)

पूरे कोड:

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

धन्यवाद!

+1

क्योंकि 'getFrom' एक स्ट्रिंग वापस नहीं करता है? इस एपीआई का कभी भी उपयोग नहीं करने के बाद, ऐसा लगता है कि यह एक इंटरनेट एड्रेस देता है जो (शायद) का पूरा नाम और ईमेल पता पाने के लिए कुछ एक्सेसर है। –

उत्तर

7

सादा पाठ और html संदेशों के लिए:

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

मल्टीपार्ट संदेश के लिए:

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

परिवर्तन इस

message[i].getFrom() 

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

शरीर के बारे में कैसे? Message.getContent() का उपयोग शरीर को वापस नहीं करता है। – eatonphil

0

को कोशिश अगले उपयोग करने के लिए:

message[i].writeTo(System.out);