Извличане и изброяване на имейли от IMAP сървър

Изброяване на съобщения от пощенската кутия

Методът ’list_messages’ на ImapClient класът извлича списък от всички съобщения от текущо избраната папка (в този случай "Inbox"). Този списък съдържа обекти с метаданни на съобщенията, които обикновено включват информация като ID‑та на съобщенията, номера на последователност, 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 Message ID‑та

Този 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

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 имейл съобщения

За да получите информация за прикрепените файлове като име и размер без да извличате данните, използвайте следните ресурси от библиотеката:

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