在 JavaMail 中搜索 - 如何使其在服务器端发生?

Posted

技术标签:

【中文标题】在 JavaMail 中搜索 - 如何使其在服务器端发生?【英文标题】:Searching in JavaMail - how to make it happen server side? 【发布时间】:2013-10-16 06:06:52 【问题描述】:

我想我遗漏了有关如何在 JavaMail 中搜索的内容。

    从文件夹下载空邮件 创建一个与您的结果匹配的新 SearchTerm 使用您的搜索词过滤 (yourFolder.search) 结果。

这行得通。但是——为什么要这样?如果我使用 javamail 连接到类似 gmail 的东西,则搜索不会在服务器端执行,并且使用整个 javax.mail.search.SearchTerm 构造似乎没有任何优势效率或减少需要通过网络发送的数据量...

我看不到任何在服务器端执行搜索并返回匹配列表的方法。有什么想法吗?

编辑:包括我现在正在做的伪代码,它不会在服务器端执行任何搜索。即使我将其转换为使用 SearchTerm,它仍然不会在服务器端做任何事情,对吧?

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "gimaps");
final Session session = Session.getDefaultInstance(props, null);
final GmailSSLStore store = (GmailSSLStore) session.getStore("gimaps");
store.connect(ADDRESS, PASSWORD);
final GmailFolder allMailFolder = (GmailFolder) store.getFolder("[Gmail]/All Mail");
allMailFolder.open(Folder.READ_ONLY);
final Message[] allMessages = allMailFolder.getMessages();
System.out.println("Messages:" + allMessages.length);

FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
allMailFolder.fetch(allMessages, fp);

for (final Message message : allMessages) 
  final Address[] addrs = message.getFrom();
  if (addrs != null) 
    for (final Address addr : addrs) 
      if (addr.toString().toLowerCase().contains("george")) 
        System.out.println(addr.toString());
      
    
  

【问题讨论】:

【参考方案1】:

你做错了什么,但你没有提供足够的细节来让我们知道你做错了什么。

你在使用 IMAP 吗?

向我们展示一些代码和调试输出。

【讨论】:

【参考方案2】:

如果您使用预定义的SearchTerm 实现在 IMAP 文件夹中搜索,它将尝试在服务器上执行搜索。看SearchSequence.generateSequence的实现。在您的示例中,您可能希望使用FromStringTerm

如果您使用的是 gimap 提供程序,您还可以使用 Google 的 IMAP 扩展程序,其中包括 X-GM-RAW 搜索属性,让您可以像在 Gmail 网络界面中一样进行搜索。 Java 实现在 GmailRawSearchTerm 中,在服务器端工作。

【讨论】:

以上是关于在 JavaMail 中搜索 - 如何使其在服务器端发生?的主要内容,如果未能解决你的问题,请参考以下文章

用逗号替换分号,并在存储过程中的字符串的两端添加引号,以使其在IN子句中可搜索

修改搜索以使其在 SQL Server 中不区分重音

如何在服务器上部署Django项目并使其在后台一直运行

UITableView,如何修复页脚,使其在滚动时永远不会向上或向下移动?

windows vc++ 如何使用 UniversalCRT_IncludePath 以及如何使其在 cl.exe 中工作

如何从 url 中删除控制器名称,使其在 codeigniter 中变得干净