使用 WebDav 过滤 Exchange 邮箱中的消息
Contents
[
Hide
]
该 ExchangeClient 类提供 listMessages() 方法,可获取邮箱中的所有消息。若只获取满足特定条件的消息,请使用重载的 listMessages() 方法并传入 MailQuery 类作为参数。该 MailQuery 类提供了多种属性用于指定条件,例如日期、主题、发件人和收件人。此外,API 还允许使用区分大小写的过滤器检索邮箱中的电子邮件。
使用 Web Dav 过滤消息
获取邮箱中已过滤的消息:
- 连接到 Exchange 服务器。
- 创建 MailQuery 实例并设置所需属性。
- 调用 ExchangeClient.listMessages(MailQuery query) 方法,并在参数中传入 MailQuery,以仅获取过滤后的消息。
下面的代码示例展示如何连接到 Exchange 邮箱并获取主题中包含 “Newsletter” 且今天发送的消息。
ExchangeClient client = new ExchangeClient("http://MachineName/exchange/Username", "username", "password", "domain");
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
// Query building by means of ExchangeQueryBuilder class
ExchangeQueryBuilder builder = new ExchangeQueryBuilder();
// Subject contains "Newsletter"
builder.getSubject().contains("Newsletter");
// Emails that arrived today
try {
builder.getInternalDate().on(sdf.parse("10/05/2016 10:00:00"));
} catch (ParseException e) {
e.printStackTrace();
}
// Build the query
MailQuery query = builder.getQuery();
// Get list of messages
ExchangeMessageInfoCollection messages = client.listMessages(client.getMailboxInfo().getInboxUri(), query, false);
System.out.println("Imap: " + messages.size() + " message(s) found.");
获取符合特定条件的消息
上面的代码示例基于电子邮件主题和日期过滤消息。我们也可以过滤其他属性。以下是使用 MailQuery.
过滤条件:今天的日期
以下代码片段展示如何基于今天的日期过滤所有电子邮件。
// Emails that arrived today
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().on(new Date());
过滤条件:日期范围
以下代码片段展示如何基于日期范围过滤所有电子邮件。
MailQueryBuilder builder = new MailQueryBuilder();
builder.getInternalDate().beforeOrEqual(new Date());
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(1)));
过滤条件:特定发件人
以下代码片段展示如何基于特定发件人过滤所有电子邮件。
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific sender
builder.getFrom().contains("saqib.razzaq@127.0.0.1");
过滤条件:特定域
以下代码片段展示如何基于特定域过滤所有电子邮件。
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails from specific domain
builder.getFrom().contains("SpecificHost.com");
过滤条件:特定收件人
以下代码片段展示如何基于特定收件人过滤所有电子邮件。
MailQueryBuilder builder = new MailQueryBuilder();
// Get emails sent to specific recipient
builder.getTo().contains("recipient");
过滤条件:按 MessageID
以下代码片段展示如何基于 MessageID 过滤所有电子邮件。
// Get email with specific MessageId
ExchangeQueryBuilder builder1 = new ExchangeQueryBuilder();
builder1.getMessageId().equals("MessageID");
过滤条件:所有邮件投递通知
以下代码片段展示如何基于所有邮件投递通知过滤所有电子邮件。
// Get Mail Delivery Notifications
builder1 = new ExchangeQueryBuilder();
builder1.getContentClass().equals(ContentClassType.getMDN().toString());
构建复杂查询
如果在不同语句中设置了不同的 QueryBuilder 属性,则所有条件都必须匹配。例如,要获取特定日期范围且来自特定主机的消息,请编写三条语句:
使用 AND 组合查询
MailQueryBuilder builder = new MailQueryBuilder();
// Emails from specific host
builder.getFrom().contains("SpecificHost.com");
// AND all emails that arrived before today
builder.getInternalDate().before(new Date());
// AND all emails that arrived since 7 days ago
builder.getInternalDate().since(new Date(new Date().getTime() + TimeUnit.DAYS.toDays(-7)));
使用 OR 组合查询
QueryBuilder 提供 or() 方法,接受两个 MailQuery 实例作为参数。它获取匹配任一指定条件的消息。下面的示例过滤主题中含有“test”或发件人为 “noreply@host.com” 的消息。
MailQueryBuilder builder = new MailQueryBuilder();
// Specify OR condition
builder.or(builder.getSubject().contains("test"), builder.getFrom().contains("noreply@host.com"));
区分大小写的电子邮件过滤
通过在过滤条件中指定 IgnoreCase 标志,可按大小写敏感性过滤电子邮件,示例如下。
//IgnoreCase is True
MailQueryBuilder builder1 = new MailQueryBuilder();
builder1.getFrom().contains("tesT", true);
MailQuery query1 = builder1.getQuery();