2010-03-09 23 views
7

Sto cercando di eseguire una ricerca della mia gmail utilizzando Java. Con JavaMail posso fare un messaggio per ricerca messaggi in questo modo:Posso eseguire una ricerca sul server di posta in 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]); 

Ma questo richiede il download di ogni messaggio. Naturalmente posso memorizzare tutti i risultati nella cache, ma questo diventa un problema di archiviazione con grandi caselle di Gmail e sarebbe anche molto lento (posso solo immaginare quanto tempo ci vorrebbe per cercare tra gigabyte di testo ...).

Quindi la mia domanda è, c'è un modo per cercare attraverso la posta sul server, un campo di ricerca di la gmail? Forse tramite Microsoft Exchange?

Hours of Googling non ha restituito nulla.

risposta

0

connettersi all'archivio IMAP scambio e l'utilizzo javax.mail.search.SearchTerm

3

È possibile lasciare che il server di fare la ricerca per voi, con il comando IMAP appropriata. Il comando RICERCA ti porterà solo lontano, quello che probabilmente ti serve è il comando SORT. SORT non è implementata in JavaMail ma il documentation mostra come è possibile implementare da soli:

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

(io non riuscivo a capire come collegare a un URL con parentesi)

+0

Grazie. Sono in grado di connettermi al server e alla cartella IMAP, ma quando emetto un comando doCommand (come nell'esempio nel collegamento), response.isOK() è falso. Ho ottenuto un'eccezione la prima volta (che io non riesco a ricreare), ma ora ritorna solo: A5 BAD Comando sconosciuto: SORT mio codice di connessione: negozio IMAPStore = new IMAPStore (sessione , nuovo URLName ("imap: // nomeutente: [email protected]/")); store.connect(); IMAPFolder folder = (IMAPFolder) store.getFolder ("inbox"); Quindi faccio la stessa chiamata a cartella.doCommand() come esempio. Qualche idea sul perché questo non funziona? scusa per la formattazione. – smurthas

+0

'BAD Unknown command: SORT' significherebbe che il server non supporta il comando' SORT'. Il server IMAP ti dice quali funzionalità sono supportate quando esegui il comando 'CAPABILITY' (dovrebbe essere la prima cosa che invia JavaMail) in modo da poter esaminare quella risposta per vedere quali funzionalità sono disponibili. – Martin

Problemi correlati