2010-03-09 42 views
7

我正在尝试使用Java执行我的gmail搜索。用JavaMail我可以通过邮件搜索,像这样做一则消息:我可以使用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]); 

但这需要下载每个消息。当然,我可以缓存所有结果,但是这会成为大型Gmail邮箱的存储问题,并且速度也会非常慢(我只能想象通过千兆字节文本搜索需要多长时间...)。

所以我的问题是,有没有办法通过邮件在服务器上搜索la gmail的搜索字段?也许通过Microsoft Exchange?

Google的营业时间没有任何变化。

回答

0

连接到Exchange IMAP存储和使用javax.mail.search.SearchTerm

3

您可以让服务器为你做的搜索,用适当的IMAP命令。 SEARCH命令只会帮你达到目的,你可能需要的是SORT命令。排序是没有的JavaMail实现,但在documentation展示了如何实现它自己:

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

(我无法弄清楚如何使用括号链接到一个URL)

+0

感谢。我可以连接到服务器和IMAPFolder,但是当我发出doCommand(按照链接中的示例)时,response.isOK()为false。我得到了一个异常的第一时间(我似乎无法重现),但现在它只是返回: A5 BAD未知命令:SORT 我的连接代码: IMAPStore店=新IMAPStore(会话,新的URLName(“imap:// myusername:[email protected]/”)); store.connect(); IMAPFolder folder =(IMAPFolder)store.getFolder(“inbox”); 然后我做同样的folder.doCommand()调用为例。任何想法为什么这不起作用? 抱歉格式化。 – smurthas 2010-03-09 03:39:36

+0

'不明命令:SORT'意味着服务器不支持'SORT'命令。当您发出CAPABILITY命令(应该是JavaMail发送的第一个东西)时,IMAP服务器会告诉您支持哪些功能,以便您可以检查该响应以查看可用功能。 – Martin 2010-03-09 04:11:46

相关问题