Zarządzaj Folderami na Serwerze IMAP w Pythonie

Wylistuj Foldery IMAP

Pobieranie informacji o folderze z serwera IMAP jest proste przy użyciu Aspose.Email. Postępuj zgodnie z poniższymi krokami, aby pobrać i pracować ze szczegółami folderu:

  1. Użyj metody list_folders() z Aspose.Email ImapClient klasa. Ta metoda zwraca instancję ImapFolderInfoCollection, który zawiera szczegóły o wszystkich folderach.
  2. Iteruj przez ImapFolderInfoCollection obiekt umożliwiający dostęp do informacji o poszczególnych folderach.
  3. Pobierz podfoldery (opcjonalnie). Metoda list_folders() jest przeciążona. Możesz przekazać nazwę folderu jako parametr, aby pobrać kolekcję podfolderów dla określonego folderu.

Poniższy fragment kodu demonstruje, jak pobrać informacje o folderze z serwera IMAP przy użyciu metody Aspose.Email:

Zmienianie Nazwy i Usuwanie Folderów

Aspose.Email udostępnia metody ImapClient klasa do zarządzania folderami na serwerze e‑mail poprzez IMAP:

  • metoda delete_folder – trwale usuwa folder i wszystkie znajdujące się w nim wiadomości.
  • metoda rename_folder – zmienia nazwę folderu bez modyfikacji jego zawartości.

Poniższy fragment kodu pokazuje, jak programowo usunąć lub zmienić nazwę folderów na serwerze IMAP:

# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")

Utwórz i Dodaj Wiadomości do Konkretnej Folderów

Korzystając z API Aspose.Email, możesz użyć MailMessage i ImapClient klasy do dodania nowej wiadomości do folderu. Najpierw utwórz MailMessage obiekt, określając temat, nadawcę i odbiorcę. Następnie zasubskrybuj folder i dodaj do niego wiadomość. Poniższy fragment kodu demonstruje, jak dodać nową wiadomość do folderu:

  1. Zainicjalizuj klienta IMAP przy użyciu ImapClient klasa do połączenia z Twoim serwerem e‑mail. Podaj adres serwera, port, nazwę użytkownika i hasło.
  2. Wybierz docelowy folder, do którego chcesz dodać nową wiadomość, np. "Inbox", przy użyciu metody select_folder.
  3. Utwórz nowy e‑mail przy użyciu MailMessage klasa. Określ nadawcę, odbiorcę, temat i treść wiadomości.
  4. Zasubskrybuj folder przy użyciu metody subscribe_folder z nazwą folderu.
  5. Dodaj nowo utworzoną wiadomość do wybranego folderu przy użyciu metody append_message, podając nazwę folderu oraz obiekt wiadomości.

Przenoszenie wiadomości między folderami

Aspose.Email dla .NET umożliwia przenoszenie wiadomości z jednego folderu skrzynki pocztowej do drugiego przy użyciu ImapClient API. Metoda move_message używa unikalnego identyfikatora wiadomości oraz nazwy folderu docelowego do przeniesienia wiadomości do tego folderu. Poniższy fragment kodu pokazuje, jak przenosić wiadomości pomiędzy folderami:

Kopiowanie Wiadomości Pomiędzy Folderami

API Aspose.Email umożliwia łatwe kopiowanie wiadomości z jednego folderu skrzynki pocztowej do drugiego. Można kopiować pojedynczą wiadomość lub wiele wiadomości przy użyciu metod copy_message i copy_messages. Metoda copy_messages pozwala przenieść wiele wiadomości ze źródłowego folderu do folderu docelowego w obrębie skrzynki pocztowej. Poniżej znajduje się fragment kodu demonstrujący kopiowanie wiadomości pomiędzy folderami:

Praca ze Skrzynkami Specjalnego Przeznaczenia

Skrzynki specjalnego przeznaczenia to predefiniowane foldery w systemie e‑mail przeznaczone do obsługi konkretnych typów wiadomości, takich jak Wysłane, Szkice, Spam, Kosz i Archiwum. Biblioteka Aspose.Email upraszcza dostęp do tych skrzynek, powiązując atrybuty z ich rolami i przeznaczeniem. Umożliwia to klientom automatyczne wykrywanie i wyświetlanie tych folderów bez konieczności interwencji użytkownika.

Poniższy fragment kodu demonstruje, jak pobrać informacje o kluczowych skrzynkach specjalnego przeznaczenia (Inbox, Drafts, Junk, Sent i Trash) przy użyciu właściwości klasy ImapMailBoxInfo klasa i wypisz szczegóły:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

mailboxInfo = client.mailbox_info
print(mailboxInfo.inbox)
print(mailboxInfo.draft_messages)
print(mailboxInfo.junk_messages)
print(mailboxInfo.sent_messages)
print(mailboxInfo.trash)

Dostęp do Folderów i Odczyt Wiadomości Rekurencyjnie

ImapClient używa metody rekurencyjnej do listowania folderów i podfolderów z serwera IMAP. Metoda ta jest również używana do odczytywania i zapisywania wiadomości na dysku lokalnym w formacie MSG. Zarówno foldery, jak i wiadomości są tworzone i zapisywane w tej samej strukturze hierarchicznej, w jakiej występują na serwerze IMAP. Poniżej znajduje się fragment kodu demonstrujący rekurencyjne pobieranie folderów i wiadomości:

import aspose.email as ae
import os

# Recursive method to get messages from folders and sub-folders
def list_messages_in_folder(folder_info, root_folder, client):
    # Create the folder on disk (same name as on the IMAP server)
    current_folder = os.path.join(root_folder, folder_info.name)
    os.makedirs(current_folder, exist_ok=True)

    # Read the messages from the current folder, if it is selectable
    if folder_info.selectable:
        # Send a status command to get folder info
        folder_info_status = client.get_folder_info(folder_info.name)
        print(
            f"{folder_info_status.name} folder selected. New messages: {folder_info_status.new_message_count}, "
            f"Total messages: {folder_info_status.total_message_count}"
        )

        # Select the current folder and list messages
        client.select_folder(folder_info.name)
        msg_info_coll = client.list_messages()
        print("Listing messages....")
        for msg_info in msg_info_coll:
            # Get subject and other properties of the message
            print("Subject:", msg_info.subject)
            print(
                f"Read: {msg_info.is_read}, Recent: {msg_info.recent}, Answered: {msg_info.answered}"
            )

            # Get rid of characters like ? and :, which should not be included in a file name
            # Save the message in MSG format
            file_name = (
                msg_info.subject.replace(":", " ").replace("?", " ")
                + "-"
                + str(msg_info.sequence_number)
                + ".msg"
            )
            msg = client.fetch_message(msg_info.sequence_number)
            msg.save(
                os.path.join(current_folder, file_name),
                ae.SaveOptions.default_msg_unicode,
            )
        print("============================\n")
    else:
        print(f"{folder_info.name} is not selectable.")

    try:
        # If this folder has sub-folders, call this method recursively to get messages
        folder_info_collection = client.list_folders(folder_info.name)
        for subfolder_info in folder_info_collection:
            list_messages_in_folder(subfolder_info, root_folder, client)
    except Exception:
        pass



client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

try:
    # The root folder (which will be created on disk) consists of host and username
    root_folder = f"{client.host}-{client.username}"

    # Create the root folder and list all the folders from the IMAP server
    os.makedirs(root_folder, exist_ok=True)
    folder_info_collection = client.list_folders()
    for folder_info in folder_info_collection:
        # Call the recursive method to read messages and get sub-folders
        list_messages_in_folder(folder_info, root_folder, client)
except Exception as ex:
        print("\n", ex)

print("\nDownloaded messages recursively from IMAP server.")

Użyj MultiConnection do Operacji Grupowych na Folderach

Aspose.Email umożliwia skonfigurowanie klienta tak, aby nawiązywał wiele jednoczesnych połączeń z serwerem IMAP. Nie zwiększa to koniecznie wydajności, ale jest niezawodnym rozwiązaniem dla operacji równoległych. Jest to szczególnie przydatne, gdy klient musi wykonywać wiele zadań jednocześnie, np. pobierać różne foldery e‑mail, synchronizować dużą ilość danych lub przetwarzać wiele wiadomości jednocześnie.

Poniższy fragment kodu pokazuje, jak nawiązać wiele połączeń z serwerem IMAP podczas wysyłania zbioru wiadomości e‑mail przy użyciu metody ‘append_messages’ klasy ImapClient klasa:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE
client.append_messages(messages)