2010-03-09 8 views
7

Estoy tratando de realizar una búsqueda de mi gmail utilizando Java. Con JavaMail puedo hacer un mensaje por mensaje de búsqueda como lo siguiente:¿Puedo realizar una búsqueda en el servidor de correo 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]); 

Pero esto requiere la descarga de cada mensaje. Por supuesto, puedo guardar en caché todos los resultados, pero esto se convierte en una preocupación de almacenamiento con grandes cajas de gmail y también sería muy lento (solo puedo imaginar cuánto tardaría en buscar gigabytes de texto ...).

Entonces mi pregunta es, ¿hay alguna forma de buscar por correo en el servidor, un campo de búsqueda de la gmail? ¿Tal vez a través de Microsoft Exchange?

Horas de Google no ha encontrado nada.

Respuesta

0

conectarse al almacén de IMAP intercambio y el uso javax.mail.search.SearchTerm

3

Puede dejar que el servidor de hacer la búsqueda de que, con el mandato adecuado IMAP. El comando SEARCH solo te llevará hasta ahora, lo que probablemente necesites es el comando SORT. ORDENAR no está implementado en JavaMail pero el documentation muestra cómo se puede implementar por sí mismo:

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

(no pude encontrar la manera de enlazar a una URL con paréntesis)

+0

Gracias. Puedo conectarme al servidor y a IMAPFolder, pero cuando publico un doCommand (según el ejemplo en el enlace), response.isOK() es falso. Tengo una excepción de la primera vez (que no puedo parecer para recrear), pero ahora simplemente devuelve: A5 BAD comando desconocido: ORDENAR Mi código de conexión: tienda IMAPStore = new IMAPStore (sesión , nuevo URLName ("imap: // myusername: [email protected]/")); store.connect(); carpeta IMAPFolder = (IMAPFolder) store.getFolder ("bandeja de entrada"); Luego hago la misma llamada a folder.doCommand() como ejemplo. ¿Alguna idea sobre por qué esto no está funcionando? disculpa el formato. – smurthas

+0

'BAD Comando desconocido: SORT' significa que el servidor no admite el comando' SORT'. El servidor IMAP le dice qué características admite cuando ejecuta el comando 'CAPABILITY' (debería ser lo primero que envía JavaMail) para que pueda examinar esa respuesta y ver qué funciones están disponibles. – Martin

Cuestiones relacionadas