Отримання та список електронних листів з IMAP‑серверу

Список повідомлень із скриньки

Метод ’list_messages’ класу ImapClient клас отримує список усіх повідомлень з поточно обраної папки (у цьому випадку «Inbox»). Цей список містить об’єкти метаданих повідомлень, які, як правило, включають ідентифікатори повідомлень, номери послідовностей, UID та, можливо, короткі дані, такі як рядки теми або інформація про відправника.

Нижче наведений фрагмент коду демонструє, як отримати метадані повідомлень з Inbox та вивести загальну кількість повідомлень, які він містить:

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‑ідентифікатори повідомлень

The ImapMessageInfo клас пропонує зручний спосіб доступу до MIME MessageId для ідентифікації повідомлень без необхідності витягувати весь вміст повідомлення. Нижче наведений фрагмент коду, який демонструє, як вивести MIME MessageId:

Перерахувати повідомлення з MultiConnection

The 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 дозволяє створювати два списки повідомлень: один із номерами послідовностей, інший із унікальними ідентифікаторами всіх повідомлень у вхідних. Щоб отримати повідомлення з 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)

Отримати повідомлення з сервера та зберегти на диск

The ImapClient клас може отримувати повідомлення з IMAP‑серверу та зберігати їх у форматі EML на локальний диск. Наступні кроки необхідні для збереження повідомлень на диск:

  1. Використайте ImapClient клас з необхідними параметрами (host, port, username, password) для підключення до IMAP‑серверу.
  2. Виберіть потрібну папку, викликавши метод select_folder (наприклад, «Inbox»)
  3. Отримайте повідомлення, перебираючи їх за допомогою методу list_messages.
  4. Щоб зберегти повідомлення, для кожного повідомлення використовуйте метод save_message, вказуючи каталог та додаючи унікальний ідентифікатор до назви файлу для унікальності.

Наступний фрагмент коду показує, як отримати електронні листи з сервера та зберегти їх:

Зберегти повідомлення у форматі 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‑повідомлень

Щоб отримати інформацію про вкладення, наприклад назву, розмір, без завантаження самих даних, використайте наступні ресурси бібліотеки:

  • 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})")