Pobieranie i wymienianie e‑maili z serwera IMAP

Wymień wiadomości ze skrzynki

Metoda ’list_messages’ klasy ImapClient klasa pobiera listę wszystkich wiadomości z aktualnie wybranego folderu (w tym przypadku „Inbox”). Lista ta zawiera obiekty metadanych wiadomości, które zwykle obejmują informacje takie jak identyfikatory wiadomości, numery sekwencyjne, UID‑y oraz ewentualne podsumowania, takie jak tematy lub informacje o nadawcy.

Poniższy fragment kodu demonstruje, jak pobrać metadane wiadomości z folderu Skrzynka odbiorcza i wyświetlić całkowitą liczbę znajdujących się w nim wiadomości:

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

Wymienianie wiadomości ze wsparciem stronicowania

W scenariuszach, w których serwer pocztowy zawiera dużą liczbę wiadomości w skrzynce, często pożądane jest wymienianie lub pobieranie wiadomości z obsługą stronicowania. Aspose.Email ImapClient klasa pozwala na pobieranie wiadomości z serwera z obsługą stronicowania.

Rekurencyjne wymienianie wiadomości

Protokół IMAP umożliwia rekurencyjne wymienianie wiadomości z folderu skrzynki pocztowej, w tym również z podfolderów. Poniższy fragment kodu demonstruje, jak rekurencyjnie wymienić wiadomości:

Wymień identyfikatory MIME Message ID

Ten ImapMessageInfo klasa oferuje wygodny sposób dostępu do MIME MessageId do identyfikacji wiadomości bez konieczności pobierania całej zawartości. Poniżej fragment kodu, który demonstruje, jak wymienić MIME MessageId:

Wymień wiadomości z użyciem MultiConnection

Ten ImapClient klasa oferuje właściwość use_multi_connection, która umożliwia użycie wielu połączeń przy operacjach o dużym obciążeniu. Dodatkowo, możesz określić liczbę połączeń w trybie wielopołączeniowym przy użyciu właściwości connections_quantity. Poniższy fragment kodu ilustruje, jak wykorzystać tryb wielopołączeniowy do wymieniania wiadomości:

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)

Należy zauważyć, że użycie tego trybu nie musi koniecznie prowadzić do zwiększenia wydajności.

Pobierz wiadomości po numerze sekwencji lub unikalnym ID

API Aspose.Email pozwala wygenerować dwie listy wiadomości, jedną zawierającą numery sekwencyjne, a drugą unikalne identyfikatory wszystkich wiadomości w skrzynce odbiorczej. Aby pobrać wiadomości z serwera IMAP po ich identyfikatorach, użyj metody fetch_messages klasy ImapClient klasa. Poniższy fragment kodu demonstruje, jak wymienić wiadomości po identyfikatorach:

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))

Pobierz wiadomości w kolejności malejącej

Zadanie realizuje się poprzez zdefiniowanie ustawień paginacji przy pobieraniu wiadomości. W tym celu użyj właściwości ascending_sorting klasy PageSettings klasa, będąca częścią modułu klienta IMAP. Ustaw atrybut ascending_sorting na PageSettings ustawienie obiektu na False. Wskazuje to, że wiadomości powinny być domyślnie sortowane w kolejności malejącej podczas pobierania. Poniższy fragment kodu pokazuje, jak pobrać wiadomości w kolejności malejącej:

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)

Pobierz wiadomości z serwera i zapisz na dysku

Ten ImapClient klasa może pobrać wiadomości z serwera IMAP i zapisać je w formacie EML na dysku lokalnym. Następujące kroki są wymagane, aby zapisać wiadomości na dysku:

  1. Użyj ImapClient klasa z niezbędnymi parametrami (host, port, nazwa użytkownika, hasło) do połączenia z serwerem IMAP.
  2. Wybierz żądany folder, wywołując metodę select_folder (np. „Inbox”)
  3. Pobierz wiadomości, iterując po nich przy użyciu metody list_messages.
  4. Aby zapisać wiadomości, dla każdej wiadomości użyj metody save_message, podając katalog i dopisując unikalny identyfikator do nazwy pliku w celu zapewnienia unikalności.

Poniższy fragment kodu pokazuje, jak pobrać wiadomości e‑mail z serwera i zapisać je:

Zapisz wiadomości w formacie MSG

Aby zapisać e‑maile w formacie MSG, wywołaj metodę fetch_message klasy ImapClient klasa. Zwraca wiadomość jako instancję MailMessage klasa. Następnie można wywołać metodę MailMessage.save(), aby zapisać wiadomość w formacie MSG. Poniższy fragment kodu pokazuje, jak zapisać wiadomości w formacie MSG.

Pobierz dodatkowe parametry wiadomości (informacje podsumowujące)

Poniższy fragment kodu demonstruje, jak współdziałać z serwerem e‑mail przy użyciu Aspose.Email ImapClient do wysyłania i manipulacji wiadomościami e‑mail. Kod używa UID wiadomości do pobrania informacji podsumowujących z dodatkowymi parametrami ("X-GM-MSGID", "X-GM-THRID"). Podobne informacje są pobierane przy użyciu numeru sekwencyjnego.

Uzyskaj Nagłówek List-Unsubscribe

Nagłówek "ListUnsubscribe" jest zwykle dołączany do nagłówków wiadomości e‑mail wysyłanych przez listy mailingowe lub zautomatyzowane systemy e‑mail. Zawiera on link lub adres e‑mail, którego odbiorcy mogą użyć, aby wypisać się z listy mailingowej lub z automatycznych wiadomości. Aspose.Email udostępnia właściwość ’list_unsubscribe’ klasy ImapMessageInfo klasa do pobrania tego nagłówka. Poniższy fragment kodu demonstruje użycie tej właściwości i może być użyty jako część systemu automatyzującego proces wypisywania się z niechcianych e‑maili:

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)

Uzyskaj Informacje o Identyfikacji Wiadomości

Podczas pobierania i przetwarzania wiadomości e‑mail możesz pobierać szczegóły wiadomości przy użyciu ich numerów sekwencyjnych.

Poniższe funkcje są używane do interakcji ze skrzynką IMAP:

Poniższy fragment kodu pokazuje, jak uzyskać informacje identyfikacyjne o wiadomościach:

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)

Wymień załączniki z wiadomości e‑mail IMAP

Aby uzyskać informacje o załącznikach, takie jak nazwa i rozmiar, bez pobierania danych załącznika, użyj następujących zasobów bibliotecznych:

Poniższy przykład kodu demonstruje, jak wymienić załączniki dla każdej wiadomości e‑mail przy użyciu 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})")