2010-03-09 17 views
7

Java kullanarak gmail'imi araştırmaya çalışıyorum. JavaMail ile mesaj aramaya göre bir mesaj gönderebilirim:Java'da posta sunucusunda arama yapabilir miyim?

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

Ancak bu her mesajın indirilmesini gerektirir. Tabii ki tüm sonuçları önbelleğe alabilirim, ancak bu büyük gmail kutuları ile bir depolama sorunu haline gelir ve aynı zamanda çok yavaş olur (sadece gigabaytlar arasında arama yapmak için ne kadar zaman alacağını hayal edebiliyorum ...).

Benim sorum şu ki, sunucuda posta ile bir la gmail'in arama alanını arama yolu var mı? Belki Microsoft Exchange aracılığıyla?

Google Çalışma Saatleri hiçbir şey döndürmedi.

cevap

0

Bağlan Exchange IMAP deposuna ve Sunucu uygun IMAP komutuyla, sizin için arama yapmak sağlayabilirsiniz javax.mail.search.SearchTerm

3

kullanın. SEARCH komutu size sadece şu ana kadar ulaşacaktır, muhtemelen ihtiyacınız olan SORT komutudur. SIRALAMA JavaMail uygulanmadı ama documentation kendiniz uygulamak nasıl gösterir:

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

+0

Teşekkür (Ben parantez ile bir URL'ye bağlantı nasıl çözemedim). Sunucuya ve IMAPFolder'a bağlanabiliyorum, ancak doCommand (bağlantıdaki örnekte olduğu gibi) düzenlediğimde, response.isOK() yanlıştır. Bir istisna ilk kez (ı yeniden görünmüyor olabilir) var, ama şimdi sadece döndürür: A5 KÖTÜ Bilinmeyen komut: SIRALAMA Benim bağlantı kodu: IMAPStore deposu = new IMAPStore (oturum , yeni URLName ("imap: // myusername: [email protected]/")); store.connect(); IMAPFolder klasörü = (IMAPFolder) store.getFolder ("gelen kutusu"); Daha sonra örnek olarak aynı folder.doCommand() çağrısını yapıyorum. Bunun neden çalışmadığı hakkında bir fikrin var mı? Biçimlendirme için özür dileriz. – smurthas

+0

'BAD Bilinmeyen komut: SORT, sunucunun' SORT' komutunu desteklemediği anlamına gelir. IMAP sunucusu, "CAPABILITY" komutunu verdiğinizde hangi özelliklerin desteklendiğini size söyler (JavaMail'in gönderdiği ilk şey olmalıdır), böylece hangi özelliklerin mevcut olduğunu görmek için bu yanıtı inceleyebilirsiniz. – Martin

İlgili konular