IMAP 电子邮件过滤 - 方法、条件及代码示例
基本消息过滤
该 ImapClient class 提供了 ListMessages() 方法获取邮箱中的所有邮件。若只获取符合某些条件的邮件,请使用重载的 ListMessages() 方法接受 MailQuery 作为参数。 MailQuery 该类提供了用于指定条件的各种属性,例如日期、主题、发件人、收件人等。第一个示例演示了
从邮箱过滤邮件
- 连接并登录 IMAP 服务器
- 创建该类的实例 MailQuery 并设置属性
- 调用 ImapClient.ListMessages(MailQuery query) 方法并传递 MailQuery 使用参数仅获取过滤后的邮件。
以下代码片段展示了如何连接到 IMAP 邮箱并获取今天到达且主题中包含 "newsletter" 的邮件。
按特定条件过滤消息
上述代码示例 根据电子邮件主题和日期过滤消息。我们也可以使用其他属性设置其他支持的条件。以下是使用…设置条件的一些示例 MailQuery。以下代码片段展示了如何对以下条件过滤邮件:
- 今天的日期。
- 日期范围。
- 来自特定发件人。
- 来自特定域。
- 来自特定收件人。
今天的日期
以下代码片段展示了如何按今天的日期过滤邮件。
日期范围
以下代码片段展示了如何按日期范围过滤电子邮件。
特定发送者
以下代码片段展示了如何按特定发件人过滤邮件。
特定域
以下代码片段展示了如何按特定域过滤邮件。
特定收件人
以下代码片段展示了如何按特定收件人过滤邮件。
高级查询构建
如果不同 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 提供从邮箱搜索邮件并分页列出的功能。以下代码片段展示了如何使用分页支持过滤邮件。