当前位置: 首页 > 知识库问答 >
问题:

在JavaMail中搜索-如何在服务器端实现?

司雅畅
2023-03-14

我想我错过了一些关于如何在JavaMail中搜索的内容。

  1. 文件夹下载空邮件
  2. 创建与结果匹配的新搜索词
  3. 使用搜索词筛选(yourFolder.search)结果

这是可行的。但是,为什么要这样做?如果我使用javamail连接到gmail之类的东西,搜索不会在服务器端执行,而且使用整个javax似乎没有任何优势。邮政搜索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());
      }
    }
  }
}

共有2个答案

任绪
2023-03-14

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

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

曹臻
2023-03-14

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

您正在使用IMAP吗?

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

 类似资料:
  • 我的要求是,如果用户使用Lucene搜索搜索“页码”,搜索结果应注意将结果中的页码与列表顶部的精确页码匹配。 现在在我的例子中,我尝试使用SortField进行排序- 假设我搜索了术语'5',然后在搜索结果中,而不是在列表的顶部显示精确页码匹配,它显示搜索的术语'5',它存在于每个页面上。 有人能建议如何在列表顶部的Lucene搜索结果中包含页码吗。 我的代码-

  • 我正在尝试从FireBase获取所有用户的名称,该名称包含给定的字符串。例如,如果我有这些用户: 我希望所有用户的名称都包含'D',因此我希望得到这样的结果: 这是我的Firebase目前的结构: 2)现在我不想有服务器端代码,什么是实现自定义索引的好的和有效的方法? 谢谢

  • 问题内容: 我正在使用索引器将数据从我的SQL数据库同步到Azure搜索服务。我的SQL视图中有一个字段,其中包含XML数据。列包含字符串列表。集合(Edm.String)中我的Azure搜索服务索引中的对应字段。在检查一些文档时,我发现Indexer不会将Xml(SQL)更改为Collection(Azure Search)。关于如何从Xml数据创建Collection的方法,是否有任何解决方法

  • 问题内容: 我们正在尝试在我们的JAX Web服务中执行安全性实施,并在标头中传递用户名和密码,如下所示。 在Java中,我们正在尝试检索用户名和密码,但是我们不确定该怎么做,因为它是Soap Header的一部分,并且我们之前没有检索过Header信息。 我们正在尝试做上述操作并获取header元素,但它没有返回值。任何有关检索用户名和密码的帮助将不胜感激。 问题答案: 你可以阅读从SOAP头的

  • 问题内容: 我是SQL编程的新手。 我有一个表的工作,其中字段是,,,,,,。 我想从前端实施 关键字搜索 。关键字可以位于上表的任何字段中。 这是我尝试过的查询,但包含许多重复的行: 问题答案: 对于VARCHAR字段上的单个关键字,可以使用: 对于描述,通常最好添加全文索引并进行全文搜索(仅适用于MyISAM):

  • 问题内容: 我可以确定是否可以看到JAVA OPTS参数。我想使用Jconsole监视hornetq服务器,所以我需要端口号。 我记得前一段时间连接到它时使用过一些命令,例如java grep等。 问题答案: 如果知道进程号,则可以使用netstat查找程序正在侦听的端口,例如 JMX侦听器的常规端口是1099。