Hantera mappar på IMAP‑server i Python
Lista IMAP‑mappar
Att hämta mappinformation från en IMAP‑server är enkelt med Aspose.Email. Följ stegen nedan för att hämta och arbeta med mappdetaljer:
- Använd metoden list_folders() från Aspose.Email ImapClient klass. Denna metod returnerar en instans av ImapFolderInfoCollection, som innehåller detaljer om alla mappar.
- Loopa igenom ImapFolderInfoCollection objekt för att komma åt information om enskilda mappar.
- Hämta undermappar (valfritt). Metoden list_folders() är överlagrad. Du kan skicka ett mappnamn som parameter för att hämta en samling av undermappar för den angivna mappen.
Följande kodsnutt demonstrerar hur man hämtar mappinformation från en IMAP‑server med Aspose.Email‑metoden:
Byta namn på och radera mappar
Aspose.Email tillhandahåller metoder för ImapClient klass för att hantera mappar på en e‑postserver via IMAP:
- Metoden delete_folder – tar permanent bort mappen och alla meddelanden som finns i den.
- Metoden rename_folder – ändrar mappens namn utan att ändra innehållet i den.
Kodsnutten nedan visar hur man raderar eller byter namn på mappar på IMAP‑servern programatiskt:
# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")
Skapa och lägg till meddelanden i specifika mappar
Med Aspose.Email‑API kan du använda MailMessage och ImapClient klasser för att lägga till ett nytt meddelande i en mapp. Skapa först en MailMessage objekt genom att specificera ämne, avsändare och mottagare. Prenumerera sedan på en mapp och lägg till meddelandet i den. Kodsnutten nedan visar hur man lägger till ett nytt meddelande i en mapp:
- Initiera IMAP‑klienten med ImapClient klass för att ansluta till din e‑postserver. Ange serveradress, port, användarnamn och lösenord.
- Välj målmappar där du vill lägga till det nya meddelandet, t.ex. "Inbox", med metoden select_folder.
- Skapa ett nytt e‑postmeddelande med MailMessage klass. Specificera avsändare, mottagare, ämne och meddelandeinnehåll.
- Prenumerera på mappen med metoden subscribe_folder och mappens namn.
- Lägg till det nyss skapade meddelandet i den valda mappen med metoden append_message, specificera mappens namn och meddelandeobjektet.
Flytta meddelanden mellan mappar
Aspose.Email för .NET möjliggör att flytta meddelanden från en brevlådemapp till en annan med ImapClient API. Metoden move_message använder meddelandets unika ID och destinationsmappens namn för att flytta ett meddelande till destinationsmappen. Följande kodsnutt visar hur du flyttar meddelanden mellan mappar:
Kopiera meddelanden mellan mappar
Aspose.Email‑API låter dig kopiera meddelanden från en brevlådemapp till en annan utan ansträngning. Du kan kopiera ett enskilt meddelande eller flera meddelanden med metoderna copy_message och copy_messages. Metoden copy_messages gör att du kan överföra flera meddelanden från en källmapp till en destinationsmapp i brevlådan. Nedan finns en kodsnutt som demonstrerar hur man kopierar meddelanden mellan mappar:
Arbeta med specialanvändningsbrevlådemappar
Specialanvändningsbrevlådor är fördefinierade mappar i ett e‑postsystem som är utformade för att hantera specifika typer av meddelanden, såsom Sent, Drafts, Junk, Trash och Archive. Aspose.Email‑biblioteket förenklar åtkomsten till dessa brevlådor genom att associera attribut med deras roller och syften. Detta gör att klienter automatiskt kan upptäcka och visa dessa mappar utan någon användarintervention.
Följande kodsnutt demonstrerar hur man hämtar information om viktiga specialanvändningsbrevlådor (Inbox, Drafts, Junk, Sent och Trash) med egenskaperna för ImapMailBoxInfo klass och skriv ut detaljerna:
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)
Åtkomst till mappar och läs meddelanden rekursivt
ImapClient använder den rekursiva metoden för att lista mappar och undermappar från IMAP‑servern. Denna metod används också för att läsa och spara meddelanden till den lokala disken i MSG‑format. Både mappar och meddelanden skapas och sparas i samma hierarkiska struktur som de visas på IMAP‑servern. Nedan finns en kodsnutt som demonstrerar hur man hämtar mappar och meddelanden rekursivt:
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.")
Använd MultiConnection för batch‑mapoperationer
Aspose.Email gör det möjligt att konfigurera klienten för att etablera flera samtidiga anslutningar till IMAP‑servern. Det ökar inte nödvändigtvis prestandan, men det är en pålitlig lösning för parallella operationer. Detta är särskilt användbart om klienten måste utföra flera uppgifter samtidigt, exempelvis hämta olika e‑postmappar, synkronisera stora datamängder eller bearbeta flera meddelanden samtidigt.
Kodsnutten nedan visar hur man etablerar flera anslutningar till IMAP‑servern samtidigt som en samling e‑postmeddelanden laddas upp med metoden ‘append_messages’ för ImapClient klass:
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)