从 IMAP 服务器获取并列出电子邮件

列出邮箱中的邮件

该类的 ’list_messages’ 方法 ImapClient 类从当前选定的文件夹(此处为 "Inbox")获取所有邮件的列表。该列表包含邮件元数据对象,通常包括邮件 ID、序列号、UID,以及可能的摘要信息,如主题或发件人信息。

下面的代码片段演示了如何从收件箱获取邮件元数据,并打印出其中包含的邮件总数:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.select_folder("Inbox")

messages = client.list_messages()
print(f"Total Messages: {len(messages)}")

使用分页列出邮件

在邮箱中邮件数量庞大的情况下,通常希望使用分页支持来列出或检索邮件。Aspose.Email ImapClient 类允许您在服务器上检索带分页支持的邮件。

递归列出邮件

IMAP 协议允许递归列出邮箱文件夹中的邮件,也可以列出其子文件夹中的邮件。下面的代码片段演示了如何递归列出邮件:

列出 MIME 消息 ID

ImapMessageInfo 类提供了一种便捷方式来访问 MIME MessageId,以便在无需提取完整邮件内容的情况下标识邮件。下面的代码片段演示了如何列出 MIME MessageId:

使用多连接列出邮件

ImapClient 类提供 use_multi_connection 属性,可在负载较大的操作中使用多连接。此外,还可以使用 connections_quantity 属性指定多连接模式下的连接数量。下面的代码片段展示了如何利用多连接模式列出邮件:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.select_folder("Inbox")
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE

message_info_col = client.list_messages(True)

请注意,使用此模式并不一定会提升性能。

按序列号或唯一 ID 检索邮件

Aspose.Email API 允许生成两组邮件列表,一组包含序列号,另一组包含收件箱中所有邮件的唯一 ID。要按标识符从 IMAP 服务器获取邮件,请使用该类的 fetch_messages 方法 ImapClient 类。下面的代码片段演示了如何按标识符列出邮件:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

# List messages
message_info_col = client.list_messages()
print("ListMessages Count:", message_info_col.count)

# Get sequence numbers and unique IDs
sequence_number_ar = [mi.sequence_number for mi in message_info_col]
unique_id_ar = [mi.unique_id for mi in message_info_col]

# Fetch messages by sequence number
fetched_messages_by_snum = client.fetch_messages(sequence_number_ar)
print("FetchMessages-sequenceNumberAr Count:", len(fetched_messages_by_snum))

# Fetch messages by UID
fetched_messages_by_uid = client.fetch_messages(unique_id_ar)
print("FetchMessages-uniqueIdAr Count:", len(fetched_messages_by_uid))

以降序获取邮件

通过为邮件检索定义分页设置来实现此任务。为此,请使用该类的 ascending_sorting 属性 PageSettings 类是 IMAP 客户端模块的一部分。在其上设置 ascending_sorting 属性 PageSettings 对象设为 False。这表示在检索时默认按降序对邮件进行排序。下面的代码片段展示了如何以降序检索邮件:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

page_settings = ae.clients.imap.PageSettings
page_settings.ascending_sorting = False
page_info = client.list_messages_by_page(5, page_settings)
messages = page_info.items

for message in messages:
    print(message.subject)

从服务器获取邮件并保存到磁盘

ImapClient 类可以从 IMAP 服务器获取邮件并以 EML 格式保存到本地磁盘。保存邮件到磁盘需要以下步骤:

  1. 使用 ImapClient 类需要提供必要的参数(host、port、username、password)以连接到 IMAP 服务器。
  2. 通过调用 select_folder 方法(例如 "Inbox")选择所需的文件夹
  3. 使用 list_messages 方法遍历获取邮件。
  4. 要保存邮件,请对每封邮件使用 save_message 方法,指定目录,并在文件名后追加唯一 ID 以确保唯一性。

下面的代码片段展示了如何从服务器获取电子邮件并保存:

以 MSG 格式保存消息

要以 MSG 格式保存邮件,请调用该类的 fetch_message 方法 ImapClient 类。它返回该消息的实例,属于 MailMessage 类。随后可以调用 MailMessage.save() 方法将邮件保存为 MSG。下面的代码片段展示了如何以 MSG 格式保存邮件。

检索额外的邮件参数(摘要信息)

下面的代码片段演示了如何使用 Aspose.Email 与邮件服务器交互 ImapClient 用于发送和操作电子邮件。代码使用邮件 UID 以及额外参数("X-GM-MSGID", "X-GM-THRID")检索摘要信息。使用序列号也可以检索类似信息。

获取 List-Unsubscribe 标头

"ListUnsubscribe" 标头通常包含在邮件列表或自动邮件系统发送的电子邮件头中。它提供了一个链接或电子邮件地址,收件人可以使用它来取消订阅邮件列表或自动邮件。Aspose.Email 提供了该类的 ’list_unsubscribe’ 属性 ImapMessageInfo 用于检索此标头的类。下面的代码片段演示了该属性的使用,可作为系统的一部分,用于自动化取消订阅不需要的电子邮件的过程:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

message_info_col = client.list_messages()

# Iterate through each message
for imap_message_info in message_info_col:
    print("ListUnsubscribe Header:", imap_message_info.list_unsubscribe)

获取消息标识信息

在检索和处理邮件时,您可以使用其序列号获取邮件详情。

以下功能用于与 IMAP 邮箱交互:

下面的代码片段展示了如何获取邮件的标识信息:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

msg_infos = client.list_messages("INBOX")

for msg_info in msg_infos:
    # fetch by sequence number
    msg = client.fetch_message(msg_info.sequence_number)

    # fetch by unique id
    msg = client.fetch_message(msg_info.unique_id)

列出 IMAP 邮件的附件

要获取附件的名称、大小等信息而不下载附件数据,请使用以下库资源:

下面的代码示例演示了如何使用 Aspose.Email 列出每封邮件的附件 ImapClient:

# List messages
message_info_col = client.list_messages()

# Iterate through each message
for message_info in message_info_col:
    print(f"Attachments for message with sequence number {message_info.sequence_number}:")

    # List attachments for the current message
    attachment_info_col = client.list_attachments(message_info.sequence_number)

    # Iterate through each attachment
    for attachment_info in attachment_info_col:
        print(f"Attachment: {attachment_info.name} (size: {attachment_info.size})")