java - 我可以用 Java 在邮件服务器上执行搜索吗?

标签 java email search exchange-server jakarta-mail

我正在尝试使用 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?

谷歌搜索数小时一无所获。

最佳答案

您可以使用适当的 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)

关于java - 我可以用 Java 在邮件服务器上执行搜索吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2406068/

相关文章:

java - 将今天的日期 + 30 天与另一个日期进行比较

java - 从根节点到所有子节点的 n-Tree 遍历

调用native方法时返回java.lang.UnsatisfiedLinkError

java - 在 OSGI 环境中 com.hazelcast.nio.serialization.HazelcastSerializationException

php - 该查询不会返回任何内容,我需要对此的建议

html - 字体在旧设备和平台上不一致,设计元素有时会损坏

php - SMTP -> 错误 : Failed to connect to server: Unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? (0)

javascript - 用于站内搜索的谷歌算法

python - 如何在Python中的大集合变量中找到最接近的字符串匹配?

c++ - 如何快速评估零集?