【问题标题】:Can I perform a search on mail server in Java?我可以用 Java 在邮件服务器上执行搜索吗?
【发布时间】:2011-01-25 06:02:35
【问题描述】:

我正在尝试使用 Java 搜索我的 gmail。使用 JavaMail,我可以像这样通过消息搜索来发送消息:

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 邮箱的存储问题,而且速度也会非常慢(我只能想象搜索千兆字节的文本需要多长时间......)。

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

几个小时的谷歌搜索一无所获。

【问题讨论】:

    标签: java email search exchange-server jakarta-mail


    【解决方案1】:

    您可以让服务器使用适当的 IMAP 命令为您进行搜索。 SEARCH 命令只会让你到目前为止,你可能需要的是 SORT 命令。 SORT 未在 JavaMail 中实现,但 documentation 显示了您如何自己实现它:

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

    (我不知道如何链接到带括号的 URL)

    【讨论】:

    • 谢谢。我可以连接到服务器和 IMAPFolder,但是当我发出 doCommand(根据链接中的示例)时,response.isOK() 是错误的。我第一次遇到异常(我似乎无法重新创建),但现在它只返回:A5 BAD Unknown command:SORT 我的连接代码:IMAPStore store = new IMAPStore(session, new URLName("imap://我的用户名:mypassword@imap.gmail.com/"));商店.连接(); IMAPFolder 文件夹 = (IMAPFolder) store.getFolder("inbox");然后我执行与示例相同的 folder.doCommand() 调用。关于为什么这不起作用的任何想法?抱歉格式化。
    • BAD Unknown command: SORT 意味着服务器不支持SORT 命令。当您发出 CAPABILITY 命令(应该是 JavaMail 发送的第一件事)时,IMAP 服务器会告诉您支持哪些功能,因此您可以检查该响应以查看哪些功能可用。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      相关资源
      最近更新 更多