2012-10-20 10 views
5

Sto provando a leggere i miei messaggi, posso farlo stampare l'intestazione ma il da e il contenuto sono visualizzati in modo divertente. Ecco il codice che sto usando per visualizzare i messaggi:JavaMail controlla il contenuto del messaggio 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); 
     } 
    } 

L'uscita è la seguente:

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

Perché non questa stampa l'indirizzo di posta elettronica reale per il dalla dichiarazione? E perché non stampa il contenuto reale del corpo? (Io sono interessanti solo in testo normale.)

codice totale:

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

Grazie!

+1

Perché 'getFrom' non restituisce una stringa? Non avendo mai usato questa API, sembra che restituisca un indirizzo Internet che (probabilmente) ha alcuni accessori per ottenere il nome completo e l'indirizzo e-mail. –

risposta

7

Per i messaggi di testo e HTML pianura:

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

dei messaggi 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

cambiamento questo

message[i].getFrom() 

a

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

che ne dici del corpo? L'utilizzo di message.getContent() non restituisce il corpo. – eatonphil

0

Tenta di utilizzare la prossima:

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