Spravovat složky na IMAP serveru v Pythonu
Vypsat IMAP složky
Získání informací o složce z IMAP serveru je s Aspose.Email jednoduché. Postupujte podle níže uvedených kroků pro získání a práci s podrobnostmi složek:
- Použijte metodu list_folders() z Aspose.Email ImapClient třída. Tato metoda vrací instanci ImapFolderInfoCollection, který obsahuje podrobnosti o všech složkách.
- Procházet ImapFolderInfoCollection objekt pro přístup k informacím o jednotlivých složkách.
- Získat podsložky (volitelné). Metoda list_folders() je přetížena. Můžete předat název složky jako parametr pro získání kolekce podsložek dané složky.
Následující úryvek kódu ukazuje, jak získat informace o složce z IMAP serveru pomocí metody Aspose.Email:
Přejmenovat a smazat složky
Aspose.Email poskytuje metody třídy ImapClient třída pro správu složek na e‑mailovém serveru přes IMAP:
- metoda delete_folder – trvale odstraní složku a všechny zprávy v ní obsažené.
- metoda rename_folder – změní název složky, aniž by změnila její obsah.
Následující úryvek kódu ukazuje, jak programově smazat nebo přejmenovat složky na IMAP serveru:
# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")
Vytvořit a přidat zprávy do konkrétních složek
S API Aspose.Email můžete použít MailMessage a ImapClient třídy pro přidání nové zprávy do složky. Nejprve vytvořte MailMessage objektu uvedením předmětu, odesílatele a příjemce. Poté se přihlaste k složce a přidejte do ní zprávu. Následující úryvek kódu ukazuje, jak přidat novou zprávu do složky:
- Inicializujte IMAP klienta pomocí ImapClient třída pro připojení k vašemu e‑mailovému serveru. Zadejte adresu serveru, port, uživatelské jméno a heslo.
- Vyberte cílovou složku, kam chcete přidat novou zprávu, například „Inbox“, pomocí metody select_folder.
- Vytvořte nový e‑mail pomocí MailMessage třída. Zadejte odesílatele, příjemce, předmět a obsah zprávy.
- Přihlaste se k složce pomocí metody subscribe_folder s názvem složky.
- Přidejte nově vytvořenou zprávu do vybrané složky pomocí metody append_message, přičemž určete název složky a objekt zprávy.
Přesun zpráv mezi složkami
Aspose.Email pro .NET umožňuje přesouvat zprávy z jedné složky poštovní schránky do druhé pomocí ImapClient API. Metoda move_message používá jedinečné ID zprávy a název cílové složky pro přesunutí zprávy do cílové složky. Následující úryvek kódu ukazuje, jak přesouvat zprávy mezi složkami:
Kopírovat zprávy mezi složkami
API Aspose.Email vám umožňuje snadno kopírovat zprávy z jedné složky poštovní schránky do druhé. Můžete kopírovat jednu zprávu nebo více zpráv pomocí metod copy_message a copy_messages. Metoda copy_messages umožňuje přenést více zpráv ze zdrojové složky do cílové složky v poštovní schránce. Níže je úryvek kódu, který ukazuje, jak kopírovat zprávy mezi složkami:
Práce se složkami speciálně určených poštovních schránek
Speciálně určené poštovní schránky jsou předdefinované složky v e‑mailovém systému určené pro zpracování konkrétních typů zpráv, jako jsou Odeslané, Návrhy, Spam, Koš a Archiv. Knihovna Aspose.Email usnadňuje přístup k těmto schránkám tím, že přiřazuje atributy k jejich rolím a účelům. To umožňuje klientům automaticky objevit a zobrazit tyto složky bez nutnosti zásahu uživatele.
Následující úryvek kódu ukazuje, jak získat informace o klíčových speciálně určených poštovních schránkách (Inbox, Drafts, Junk, Sent a Trash) pomocí vlastností třídy ImapMailBoxInfo třída a vytištění podrobností:
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)
Přístup ke složkám a čtení zpráv rekurzivně
ImapClient používá rekurzivní metodu k vypsání složek a podsložek z IMAP serveru. Tato metoda se také používá k čtení a ukládání zpráv na lokální disk ve formátu MSG. Jak složky, tak zprávy jsou vytvářeny a ukládány ve stejné hierarchické struktuře, jaké mají na IMAP serveru. Níže je úryvek kódu, který ukazuje, jak rekurzivně získávat složky a zprávy:
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.")
Použít MultiConnection pro hromadné operace se složkami
Aspose.Email umožňuje nakonfigurovat klienta tak, aby navazoval více souběžných spojení k IMAP serveru. To nutně neznamená zvýšení výkonu, ale je to spolehlivé řešení pro souběžné operace. To je zvláště užitečné, pokud klient potřebuje provádět více úkolů najednou, například načítat různé e‑mailové složky, synchronizovat velké objemy dat nebo zpracovávat více zpráv najednou.
Následující úryvek kódu ukazuje, jak navázat více spojení k IMAP serveru během nahrávání kolekce e‑mailových zpráv pomocí metody ‘append_messages’ třídy ImapClient třída:
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)