2010-03-09 8 views
7

J'essaie d'effectuer une recherche de mon gmail en utilisant Java. Avec JavaMail je peux faire un message par recherche de message comme ceci:Puis-je effectuer une recherche sur le serveur de messagerie en Java?

Properties props = System.getProperties(); 
props.setProperty("mail.store.protocol", "imaps"); 
Session session = Session.getDefaultInstance(props, null); 
Store store = session.getStore("imaps"); 
store.connect("imap.gmail.com", "myUsername", "myPassword"); 

Folder inbox = store.getFolder("Inbox"); 
inbox.open(Folder.READ_ONLY); 

SearchTerm term = new SearchTerm() { 
    @Override 
    public boolean match(Message mess) { 
    try { 
     return mess.getContent().toString().toLowerCase().indexOf("boston") != -1; 
    } catch (IOException ex) { 
     Logger.getLogger(JavaMailTest.class.getName()).log(Level.SEVERE, null, ex); 
    } catch (MessagingException ex) { 
     Logger.getLogger(JavaMailTest.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return false; 
    } 
}; 

Message[] searchResults = inbox.search(term); 
for(Message m:searchResults) 
    System.out.println("MATCHED: " + m.getFrom()[0]); 

Mais cela nécessite le téléchargement de chaque message. Bien sûr, je peux mettre en cache tous les résultats, mais cela devient une préoccupation de stockage avec de grandes boîtes de Gmail et serait également très lent (je ne peux qu'imaginer combien de temps cela prendrait pour rechercher des gigaoctets de texte ...). Donc, ma question est, y a-t-il un moyen de faire une recherche par courrier sur le serveur, un champ de recherche de la gmail? Peut-être grâce à Microsoft Exchange?

Heures de googling n'a rien changé.

Répondre

0

se connecter au magasin IMAP Exchange et utiliser javax.mail.search.SearchTerm

3

Vous pouvez laisser le serveur faire la recherche pour vous, avec la commande IMAP appropriée. La commande SEARCH ne vous aidera que jusqu'à présent, ce dont vous avez probablement besoin est la commande SORT. SORT ne sont pas mis en œuvre JavaMail mais le documentation montre comment vous pouvez l'implémenter:

http://java.sun.com/products/javamail/javadocs/com/sun/mail/imap/IMAPFolder.html#doCommand(com.sun.mail.imap.IMAPFolder.ProtocolCommand)

(je ne pouvais pas comprendre comment créer un lien vers une URL avec des parenthèses)

+0

Merci. Je peux me connecter au serveur et à IMAPFolder, mais quand j'émets un doCommand (comme dans l'exemple dans le lien), response.isOK() est faux. Je suis une exception pour la première fois (que je ne peux pas sembler recréer), mais maintenant il retourne juste: A5 BAD Commande inconnue: SORT Mon code de connexion: IMAPStore store = new IMAPStore (séance , nouveau URLName ("imap: // myusername: [email protected]/")); store.connect(); Dossier IMAPFolder = (dossier IMAP) store.getFolder ("inbox"); Ensuite, je fais le même appel folder.doCommand() que l'exemple. Des idées sur pourquoi cela ne fonctionne pas? Désolé pour le formatage. – smurthas

+0

'BAD Commande inconnue: SORT' signifierait que le serveur ne supporte pas la commande' SORT'. Le serveur IMAP vous indique quelles sont les fonctionnalités prises en charge lorsque vous exécutez la commande 'CAPABILITY' (devrait être la première chose que JavaMail envoie) afin que vous puissiez examiner cette réponse pour voir quelles fonctionnalités sont disponibles. – Martin