处理来自服务器的消息
获取邮箱信息
我们可以使用 GetMailBoxSize() 和 GetMailBoxInfo() 方法获取邮箱信息,如邮件数量和邮箱大小。
- GetMailBoxSize() 方法返回邮箱的字节大小。
- GetMailBoxInfo() 方法返回一个类型为 Pop3MailBoxInfo 的对象。
也可以使用 MessageCount 属性获取邮件数量,使用 OccupiedSize 属性获取大小。以下示例代码展示了如何获取邮箱信息。它展示了如何:
- 创建一个 Pop3Client.
- 连接到 POP3 服务器。
- 获取邮箱大小。
- 获取邮箱信息。
- 获取邮箱中的邮件数量。
- 获取已占用的大小。
获取邮箱中的邮件计数
下面的代码片段展示了如何统计邮箱中的电子邮件数量。
Aspose.Email 让开发者以多种方式处理电子邮件。例如,他们可以在决定是否下载邮件之前检索标题信息。或者他们可以从服务器检索电子邮件并直接保存(更快),或在解析后保存(更慢)。本文展示了如何检索和转换电子邮件。
检索电子邮件标题信息
电子邮件标题可以提供邮件的相关信息,帮助决定是否检索整封邮件。通常,标题信息包括发件人、主题、接收日期等(电子邮件标题在《自定义电子邮件标题》中有详细说明。该主题主要讨论使用 SMTP 发送邮件,但标题内容同样适用于 POP3 邮件)。以下示例展示了如何通过邮件的序列号从 POP3 服务器检索电子邮件标题。
检索电子邮件
Aspose.Email.Pop3 类组件提供了从 POP3 服务器检索电子邮件并借助 MailMessage 组件解析为 MailMessage 实例的能力。MailMessage 类包含多个属性和方法用于操作邮件内容。通过使用 Pop3Client 类的 FetchMessage 方法,您可以直接从 POP3 服务器获取 MailMessage 实例。以下代码片段展示了如何检索完整的电子邮件消息:
使用唯一 ID 检索消息摘要信息
API 的 POP3 客户端可以使用邮件的唯一 ID 检索服务器上的邮件摘要信息。这让您在未先完整获取邮件的情况下快速访问邮件的简要信息。以下代码片段展示了如何检索邮件摘要信息。
使用多连接列出消息
对于高负载操作,Aspose.Email 提供了 ‘use_multi_connection’ 属性的 Pop3Client 类在检索邮件时使用多连接。然而,使用此模式并不一定会提升性能。以下代码片段展示了如何建立到 POP3 服务器的连接、配置客户端以允许最多 5 条并发连接并启用多连接模式,以检索服务器上存在的邮件信息:
import aspose.email as ae
client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
message_info_coll = client.list_messages()
从服务器获取邮件并保存到磁盘
保存邮件到磁盘(不解析)
如果希望在不解析的情况下从 POP3 服务器下载电子邮件,请使用 Pop3Client 类的 SaveMessage 方法。SaveMessage 方法不会解析邮件内容,因此比 FetchMessage 方法更快。以下代码片段展示了如何通过序列号(此例为 1)保存邮件。SaveMessage 方法以原始 EML 格式保存邮件而不进行解析。
保存前解析消息
使用通过以下方式创建的客户端对象的 ‘fetch_message’ 方法 Pop3Client 类用于检索具有特定序列号的邮件。下面的代码示例演示了如何检索特定邮件并通过调用 msg 对象的 ‘save’ 方法,以邮件主题作为文件名保存:
import aspose.email as ae
client = ae.clients.pop3.Pop3Client("host", 995, "username", "password", ae.clients.SecurityOptions.AUTO)
# Fetch the message by its sequence number and Save the message using its subject as the file name
msg = client.fetch_message(1)
msg.save("first-message_out.eml", ae.SaveOptions.default_eml)
按发送者、收件人或日期过滤消息
Pop3Client 类(在《连接到 POP3 服务器》中描述)提供了 list_messages() 方法,可获取邮箱中的所有邮件。若只想获取符合特定条件的邮件,请使用重载的 ListMessages() 方法并传入 MailQuery 参数。MailQuery 类提供了多种属性用于指定查询条件,例如日期、主题、发件人、收件人等。MailQueryBuilder 类用于构建搜索表达式。首先设置所有条件和约束,然后使用 MailQueryBuilder 创建的查询填充 MailQuery 对象。Pop3Client 使用该 MailQuery 对象从服务器提取过滤后的信息。本文展示了如何根据日期和主题等条件过滤邮箱中的邮件,还演示了如何使用其他条件以及构建更复杂的查询,并展示了日期时间过滤器的应用以检索特定邮件。此外,还展示了区分大小写的过滤方法。
从邮箱过滤消息
过滤邮箱中的消息:
- 连接并登录 POP3 服务器。
- 创建 MailQuery 实例并设置所需属性。
- 调用 Pop3Client.list_messages(MailQuery query) 方法,并在参数中传入 MailQuery,以仅获取过滤后的邮件。
以下代码片段展示了如何连接到 POP3 邮箱并获取当天收到且主题中包含 “newsletter” 的邮件。
获取满足特定条件的消息
Aspose.Email 还可以构建复杂的搜索条件,用于查询和过滤电子邮件。为此请使用 MailQueryBuilder 类及其属性。获取的条件如下:
- 按投递日期获取邮件。
- 在指定范围内获取邮件。
- 获取发送自特定发件人的邮件。
- 获取发送自特定域的邮件。
- 获取发送给特定收件人的邮件。
今天的日期
要按投递日期获取邮件,请使用下面代码示例中的 ‘internal_date’ 属性:
import aspose.email as ae
from datetime import datetime
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())
日期范围
要在日期范围内获取邮件,请使用相同的 ‘internal_date’ 属性并在下面的代码示例中指定日期范围:
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
特定发送者
要获取发送自特定发件人的邮件,请使用下面代码示例中的 ‘from_address’ 属性:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")
特定域名
要获取发送自特定域的邮件,请使用下面代码示例中的 ‘from_address’ 属性:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")
特定收件人
要获取发送给特定收件人的邮件,请使用下面代码示例中的 ’to’ 属性:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")
构建复杂查询
有时需要满足多个查询。Aspose.Email 通过在多个语句中组合查询实现此目的。创建一个 MailQueryBuilder 对象并使用其属性构建特定查询。
使用 AND 组合查询
下面的代码片段展示了如何使用 AND 组合查询。
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")
使用 OR 组合查询
以下代码片段展示了如何使用 OR 合并查询。
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
应用区分大小写的过滤器
API 还提供了基于区分大小写条件过滤邮箱中电子邮件的能力。以下方法属于 StringComparisonField 类提供了使用区分大小写标志搜索电子邮件的功能。
Method Aspose.Email.StringComparisonField.contains(value, ignore_case) Method Aspose.Email.StringComparisonField.equals(value, ignore_case) Method Aspose.Email.StringComparisonField.not_contains(value, ignore_case) Method Aspose.Email.StringComparisonField.not_equals(value, ignore_case)
以下代码片段展示了如何在项目中实现此功能:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)