IMAP 电子邮件过滤 - 方法、条件及代码示例

基本消息过滤

该 ImapClient class 提供了 ListMessages() 方法获取邮箱中的所有邮件。若只获取符合某些条件的邮件,请使用重载的 ListMessages() 方法接受 MailQuery 作为参数。 MailQuery 该类提供了用于指定条件的各种属性,例如日期、主题、发件人、收件人等。第一个示例演示了

从邮箱过滤邮件

  1. 连接并登录 IMAP 服务器
  2. 创建该类的实例 MailQuery 并设置属性
  3. 调用 ImapClient.ListMessages(MailQuery query) 方法并传递 MailQuery 使用参数仅获取过滤后的邮件。

以下代码片段展示了如何连接到 IMAP 邮箱并获取今天到达且主题中包含 "newsletter" 的邮件。

按特定条件过滤消息

上述代码示例 根据电子邮件主题和日期过滤消息。我们也可以使用其他属性设置其他支持的条件。以下是使用…设置条件的一些示例 MailQuery。以下代码片段展示了如何对以下条件过滤邮件:

  1. 今天的日期。
  2. 日期范围。
  3. 来自特定发件人。
  4. 来自特定域。
  5. 来自特定收件人。

今天的日期

以下代码片段展示了如何按今天的日期过滤邮件。

日期范围

以下代码片段展示了如何按日期范围过滤电子邮件。

特定发送者

以下代码片段展示了如何按特定发件人过滤邮件。

特定域

以下代码片段展示了如何按特定域过滤邮件。

特定收件人

以下代码片段展示了如何按特定收件人过滤邮件。

高级查询构建

如果不同 MailQueryBuilder 属性在独立的语句中设置时,所有条件都会被匹配。例如,如果我们想获取特定日期范围内且来自特定主机的邮件,需要编写三条语句。

使用 AND 合并查询

下面的代码片段展示了如何使用 AND 组合查询。

使用 OR 合并查询

MailQueryBuilder 提供了 Or() 接受两个 MailQuery 将实例作为参数。它获取匹配任意两个指定条件的邮件。以下代码片段展示了如何过滤主题中包含“test”或发件人为 “noreply@host.com” 的邮件。以下代码片段展示了如何使用 OR 组合查询。

基于 InternalDate 的过滤

可以根据 InternalDate 从服务器提取邮件,但有时服务器不会返回收件箱中可见的所有邮件。原因可能是服务器时区,因为并非所有服务器都是 UTC,例如 Gmail。Aspose 按照以下内容发送类似 008 SEARCH ON 4-May-2014 的命令。 IMAP 协议 然而,由于服务器时区设置,结果可能会有所不同。已在以下位置添加了新成员: ImapMessageInfo as InternalDate 这进一步有助于过滤邮件。以下代码片段展示了如何使用 InternalDate 用于过滤邮件。

区分大小写的过滤

以下代码片段展示了如何使用区分大小写的邮件过滤。

为查询构建器指定编码

API 的 ImapQueryBuilder 构造函数可用于为搜索字符串指定编码。也可以使用以下方式进行设置。 DefaultEncoding MailQueryBuilder 的属性。以下代码片段展示了如何为查询构建器指定编码。

自定义过滤选项

使用自定义标志过滤邮件

自定义过滤搜索

例如,RFC 3501 标准不允许基于邮件中是否存在附件进行搜索。但 Gmail 提供了 IMAP 扩展 允许执行此类搜索。下面的代码片段展示了如何构建相应的查询。

ImapQueryBuilder queryBuilder = new ImapQueryBuilder();
queryBuilder.CustomSearch("X-GM-RAW \"has:attachment\"");

MailQuery mailQuery = queryBuilder.GetQuery();
ImapMessageInfoCollection messageInfoCollection = imapClient.ListMessages(mailQuery);

使用分页支持过滤邮件

ImapClient 提供从邮箱搜索邮件并分页列出的功能。以下代码片段展示了如何使用分页支持过滤邮件。