2012-10-20 21 views
5

Próbuję odczytać moje wiadomości, mogę je pobrać, ale nagłówek i treść są wyświetlane jako śmieszne. Oto kod używam do wyświetlania komunikatów:JavaMail sprawdź treść wiadomości 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); 
     } 
    } 

Wyjście jest w następujący sposób:

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

Dlaczego nie ten wydruk aktualnego adresu e-mail dla ze stwierdzeniem? I dlaczego nie drukuje rzeczywistej treści ciała? (Jestem tylko ciekawy w postaci zwykłego tekstu.)

Cały kod:

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

Dzięki!

+1

Ponieważ 'getFrom' nie zwraca ciąg? Ponieważ nigdy nie korzystaliśmy z tego interfejsu API, wygląda na to, że zwraca adres internetowy, który (prawdopodobnie) ma dostęp do pełnej nazwy i adresu e-mail. –

Odpowiedz

7

Dla zwykłych wiadomości tekstowych i HTML:

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

Do wiadomości wieloczęściowe:

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

zmiana ta

message[i].getFrom() 

do

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

co z ciałem? Użycie message.getContent() nie zwraca treści. – eatonphil

0

spróbuje użyć następny:

message[i].writeTo(System.out); 
Powiązane problemy