2012-10-20 4 views
5

Ich versuche meine Nachrichten zu lesen, ich kann es bekommen, um die Kopfzeile zu drucken, aber die von und der Inhalt werden lustig angezeigt. Hier ist der Code, den ich die Nachrichten anzuzeigen bin mit:JavaMail Nachrichteninhalt prüfen Google Mail 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); 
     } 
    } 

Der Ausgang ist wie folgt:

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

Warum nicht dieser Druck die tatsächliche E-Mail-Adresse für die von Aussage aus? Und warum druckt es nicht den tatsächlichen Körperinhalt aus? (Ich bin nur interessant im Klartext.)

Whole Code:

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

Dank!

+1

Weil 'getFrom' gibt keinen String? Wenn Sie diese API noch nie verwendet haben, sieht es so aus, als ob sie eine Internetadresse zurückgibt, die (wahrscheinlich) über einen Accessor verfügt, um den vollständigen Namen und die E-Mail-Adresse zu erhalten. –

Antwort

7

Für Klartext und HTML-Nachrichten:

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

Für mehrteilige Nachrichten:

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

Änderung dieser

message[i].getFrom() 

zu

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

Wie wäre es mit dem Körper? Die Verwendung von message.getContent() gibt den Text nicht zurück. – eatonphil

0

Versuchen neben verwenden:

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