Получение и список писем с 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‑идентификаторов сообщений
Этот ImapMessageInfo класс предоставляет удобный способ доступа к MIME MessageId для идентификации сообщений без необходимости извлекать всё их содержимое. Ниже приведён фрагмент кода, показывающий, как выводить MIME MessageId:
Вывод сообщений с MultiConnection
Этот 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
API Aspose.Email позволяет создать два списка сообщений: один со порядковыми номерами, другой с уникальными 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 класс — представляет информацию о вложении (размер, имя, тип медиа).
-
ImapAttachmentInfoCollection класс — представляет коллекцию 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})")