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

2024-05-23

我正在尝试使用 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 中实现,但文档 http://java.sun.com/products/javamail/javadocs/com/sun/mail/imap/IMAPFolder.html展示了如何自己实现它:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以用 Java 在邮件服务器上执行搜索吗? 的相关文章

  • gwt 文本框添加更改处理程序

    我有一个从设计师那里收到的文本框 但是我在 GWT 中编写了操作 问题是文本框为空 但是当通过按下按钮用值填充文本框时 将显示警报框 通知值已更改 但没有成功 帮助我 TextBox zip1 null function onModuleL
  • Web 服务客户端的 AXIS 与 JAX-WS

    我决定用Java 实现Web 服务客户端 我已经在 Eclipse 中生成了 Axis 客户端 并使用 wsimport 生成了 JAS WS 客户端 两种解决方案都有效 现在我必须选择一种来继续 在选择其中之一之前我应该 考虑什么 JAX
  • 将一个整数从 C 客户端发送到 Java 服务器

    我使用此代码将一个整数从我的 Java 客户端发送到我的 Java 服务器 int n rand nextInt 50 1 DataOutputStream dos new DataOutputStream socket getOutput
  • 对于双核手机,availableProcessors() 返回 1

    我最近购买了一部 Moto Atrix 2 手机 当我尝试查看手机中的处理器规格时 Runtime getRuntime availableProcessors 返回 1 proc cpuinfo 也仅包含有关处理器 0 的信息 出于好奇
  • 如何在 Hibernate 中自动递增复合主键中的 Id?

    我有一个带有复合主键的表 groupId and batchId 实体类看起来像 Entity name EMPLOYEE public class Employee EmbeddedId private EmployeePK employ
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • Android - 从渲染线程内结束活动

    下午好 我不熟悉 android 中的活动生命周期 并且一直在尽可能地阅读 但我不知道如何以良好的方式解决以下问题 我有一个使用 GLSurfaceView 的活动来在屏幕上绘制各种内容 在这个 GLSurfaceView 的渲染线程中 我
  • removeall 和removeif 的用例

    我找到了这个 fun main val list MutableList
  • Spring Boot 应用程序中的 Vaadin 23 Rest-API 和 UI

    我使用 Vaadin 23 3 5 开发了一个小型应用程序 到目前为止 我仅将 Spring Boot Security 与默认的 LoginView 结合使用来进行身份验证 然后使用 MainLayout 来浏览我的应用程序 但现在我需要
  • Java ByteBuffer 性能问题

    在处理多个千兆字节文件时 我注意到一些奇怪的事情 似乎使用文件通道从文件读取到使用 allocateDirect 分配的重用 ByteBuffer 对象比从 MappedByteBuffer 读取要慢得多 事实上它甚至比读取到字节还要慢使用
  • 放置 时覆盖引导程序的托管版本 3.2.0

    当我把
  • 在 Java 中并行处理两个任务

    我想在一个方法中调用8个方法 这8个方法中的2个方法是一个洞任务 其余6个方法是另一个洞任务 我想同时并行处理这两个任务 据我所知 我可以用线程来做到这一点 但说实话 要么我看不到与我的目标相似的示例 要么即使我看到了我也无法理解该示例 您
  • 使用 apache PDF-Box 插入 PDF 附件的缩略图

    我有一个代码可以将文件附加到 PDF 文件 PDDocument doc new PDDocument PDPage page new PDPage doc addPage page read attachment file File fi
  • 如何解析无效(错误/格式不正确)的 XML?

    目前 我正在开发一项功能 该功能涉及解析从其他产品收到的 XML 我决定针对一些实际的客户数据运行一些测试 看起来其他产品允许用户输入应被视为无效的输入 无论如何 我仍然必须尝试找出解析它的方法 我们正在使用javax xml parser
  • Android 2.3.4 SSL问题

    升级到 Android 2 3 4 后 出现以下异常 javax net ssl SSLException Read error ssl 0x I O error during system call Connection timed ou
  • 用于 Eclipse Galileo 的 Java“clone()”方法生成器

    java最好的工具是什么clone Eclipse Galileo 中的方法生成可从存储库中获取吗 是什么原因阻止 Eclipse 开发人员将此工具包含在标准版本中 实施起来非常困难clone 正确的 这样做被认为不是一个好的做法 Bloc
  • 如何以编程方式搜索 Google Java API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道是否以及如何以编程方式搜索 Google 特别是如果有 Java API 的话 一些事实 Goo
  • 关于 ArrayList[] x 的 Java 问题

    我一直对 ArrayList 数组有这个问题 也许你能帮忙 declare in class private ArrayList
  • 如何使用 Apache POI API 将图像添加到 pptx 中添加的图像占位符?

    我已经预定义了带有文本和图像占位符的 pptx 模板 我如何从模板访问和修改这些占位符 我可以使用 POI pptx API 直接将图像和文本添加到幻灯片中 但如何将其添加到模板的占位符中 请参阅链接以了解如何添加占位符来创建固定模板 ht
  • Java中字符串中特殊字符的替换

    Java中如何替换字符串 E g String a adf sdf 如何替换和避免特殊字符 您可以删除除此之外的所有字符可打印的 ASCII 范围 http en wikipedia org wiki ASCII ASCII printab

随机推荐