从 POP3 服务器检索电子邮件

保存邮件至磁盘而不解析

要在不解析的情况下从 POP3 服务器下载电子邮件,可以使用 save_message Aspose.Email 的方法 Pop3Client 类。以下代码片段演示了如何使用序列号(本例为 1)保存邮件。该 save_message 方法在不解析的情况下保留原始 EML 格式:

保存前解析邮件

您可以使用以下方式检索特定电子邮件: fetch_message 方法的 Pop3Client 类,指定客户端对象的所需序列号。以下代码示例展示了如何获取特定邮件并通过调用 save msg 对象上的方法:

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)

按条件从服务器过滤邮件

Aspose.Email Pop3Client class 提供了 list_messages() 方法获取邮箱中的所有邮件。若只获取符合某些条件的邮件,请使用重载的 list_messages(query) 方法接受 MailQuery 作为参数。 MailQuery 类提供了多种属性用于指定查询条件,例如日期、主题、发件人、收件人等。

构建搜索表达式,请使用 MailQueryBuilder 类。首先定义所有必要的条件和约束,然后使用 MailQueryBuilder. Pop3Client 使用此 MailQuery 对象从服务器获取过滤后的信息。

以下代码示例演示了如何基于主题、内部日期、发件人和收件人等多种条件过滤并检索 Gmail 帐户中的邮件。它还展示了区分大小写的过滤,并演示了如何高效构建复杂查询。

  1. 使用以下方式建立到 Gmail POP3 服务器的连接: Pop3Client 类已设定服务器地址、端口、用户名和密码。安全选项设置为 AUTO,以实现安全连接。
  2. 创建该类的实例 MailQueryBuilder 用于构建过滤电子邮件的搜索条件。
  3. 主题 过滤:
    • 指定了一个过滤条件:主题行中包含 “Newsletter” 的邮件。
  4. 内部日期 过滤:
    • 设置了一个过滤器以获取当天收到的邮件。
    • 另添加了一个过滤器,以检索最近一周收到的邮件。
  5. 发件人 过滤:
    • 应用过滤器查找来自特定电子邮件地址 (saqib.razzaq@127.0.0.1) 的邮件,并包含来自特定域 (SpecificHost.com) 的邮件。
  6. 收件人 过滤:
    • 指定了一个过滤器,用于查找发送给特定收件人的邮件。
  7. 合并查询 使用 OR 运算符搜索主题符合给定条件或来自特定地址的邮件。
  8. 区分大小写过滤:
    • 指定了一个区分大小写的过滤器,过滤主题中包含 “Newsletter” 的邮件(通过 True 参数指示)。
  9. 列出邮件:
    • 使用构建好的查询调用 list_messages() 方法,以从邮箱中检索过滤后的邮件。
  10. 最后,打印过滤后邮件的计数。

按日期过滤邮件

要按投递日期获取邮件,请使用 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)