2011-03-20 3 views
11

Maintenant, j'ai créé un code pour récupérer les emails non lus et lire leur corps, puis nous pouvons stocker ou faire ce que nous voulons faire.Récupérer des emails UnRead de Gmail - JavaMail API + IMAP

Il fonctionne complètement mais le problème est qu'il ne me donne que le corps pour le premier mail et pour le second il donne au corps avec des tags html.

J'utilise l'API JavaMail ...

Comment puis-je faire ??

Merci d'avance.

Meilleures salutations, Ali

package pack1; 
//import the necessary classes 

import java.io.IOException; 
import java.util.Properties; 

import javax.mail.Flags; 
import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Multipart; 
import javax.mail.NoSuchProviderException; 
import javax.mail.Session; 
import javax.mail.Store; 
import javax.mail.search.FlagTerm; 

public class InboxReader { 

    public static void main(String args[]) { 
     Properties props = System.getProperties(); 
     props.setProperty("mail.store.protocol", "imaps"); 
      try { 
       Session session = Session.getDefaultInstance(props, null); 
       Store store = session.getStore("imaps"); 
       store.connect("imap.gmail.com", "mail", "pass"); 
       System.out.println(store); 

       Folder inbox = store.getFolder("Inbox"); 
       inbox.open(Folder.READ_ONLY); 
       //Message messages[] = inbox.getMessages(); 
       FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false); 
       Message messages[] = inbox.search(ft); 

       int i =0; 
       for(Message message:messages) 
       { 

        Multipart mp = (Multipart)messages[i].getContent(); 
        Object p = mp.getBodyPart(i).getContent(); 
        String q = p.toString();//object has the body content 
        System.out.println(q);//prints the body 
        System.out.println(messages[i].getSubject()+ " \n"+i);i++; 
       } 


        } catch (NoSuchProviderException e) { 
         e.printStackTrace(); 
         System.exit(1); 
        } catch (MessagingException e) { 
         e.printStackTrace(); 
         System.exit(2); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

    } 

} 

La sortie:

a 

a 
0 
<div dir="ltr">b<br> 
</div> 

b 
1 
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 >= 2 
    at java.util.Vector.elementAt(Unknown Source) 
    at javax.mail.Multipart.getBodyPart(Multipart.java:156) 
    at javax.mail.internet.MimeMultipart.getBodyPart(MimeMultipart.java:258) 
    at pack1.InboxReader.main(InboxReader.java:39) 
+0

Je me demande si une telle question obtient +11 et pas -20 (et a joué avec 13) – benchpresser

Répondre

15

Vous utilisez le même index pour obtenir un message de votre liste pour obtenir une partie de ce message. Vous récupérez donc la partie 1 du message 1, la partie 2 du message 2, etc. À un certain moment, vous frappez un message N qui contient moins de N parties, et vous obtenez le ArrayIndexOutOfBoundsException.

Multipart mp = (Multipart)messages[i].getContent(); 
Object p = mp.getBodyPart(i).getContent(); 

De plus, vous supposez que tous vos messages sont en plusieurs parties. La première fois que vous appelez Message.getContent() sur un message non-multipart, vous obtiendrez un ClassCastException car il sera probablement vous renvoyer un String à la place.

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

De même, vous supposez des parties multiples non imbriquées. La première fois que vous recevez un message avec un multipart/mixed de premier niveau contenant une multipart/alternative comme première sous-partie, l'appel à MimeBodyPart.getContent() renverra un autre Multipart et donc p.toString() retournera simplement un identifiant d'objet Java, pas le contenu du message que vous voulez.

Object p = mp.getBodyPart(i).getContent(); 
String q = p.toString();//object has the body content 

Pour bien faire les choses, vous devez suivre la structure du message et déterminer la partie «corps» qui vous intéresse.

Questions connexes