从 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 格式保存到本地磁盘。保存邮件到磁盘需要以下步骤:
- 使用 ImapClient 类需要提供必要的参数(host、port、username、password)以连接到 IMAP 服务器。
- 通过调用 select_folder 方法(例如 "Inbox")选择所需的文件夹
- 使用 list_messages 方法遍历获取邮件。
- 要保存邮件,请对每封邮件使用 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 邮箱交互:
-
Aspose.Email.ImapMessageInfo 类 - 表示邮箱中邮件的标识信息。
-
Aspose.Email.ImapMessageInfo.sequence_number 属性 - 邮件的序列号。
-
Aspose.Email.ImapMessageInfo.unique_id 属性 - 邮件的唯一标识。
下面的代码片段展示了如何获取邮件的标识信息:
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 邮件的附件
要获取附件的名称、大小等信息而不下载附件数据,请使用以下库资源:
-
ImapAttachmentInfo 类 - 表示附件信息(大小、名称、媒体类型)。
-
list_attachments(sequence_number) 方法属于 ImapClient 类 - 获取消息的附件信息的可迭代对象或集合。
下面的代码示例演示了如何使用 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})")