Mappen beheren op IMAP‑server in Python
IMAP‑mappen weergeven
Het ophalen van mapinformatie van een IMAP‑server is eenvoudig met Aspose.Email. Volg de onderstaande stappen om mapdetails op te halen en ermee te werken:
- Gebruik de list_folders()‑methode van de Aspose.Email ImapClient klasse. Deze methode retourneert een instantie van ImapFolderInfoCollection, die details bevat over alle mappen.
- Loop door de ImapFolderInfoCollection object om informatie over individuele mappen te benaderen.
- Submappen ophalen (optioneel). De list_folders()‑methode is overladen. Je kunt een mapnaam als parameter doorgeven om een collectie submappen voor de opgegeven map op te halen.
Het onderstaande codefragment toont hoe je mapinformatie van een IMAP‑server kunt ophalen met de Aspose.Email‑methode:
Mappen hernoemen en verwijderen
Aspose.Email biedt methoden van de ImapClient klasse voor het beheren van mappen op een e‑mailserver via IMAP:
- delete_folder-methode - verwijdert de map en alle daarin aanwezige berichten permanent.
- rename_folder-methode - verandert de naam van de map zonder de inhoud ervan aan te passen.
Het onderstaande codefragment toont hoe je mappen op de IMAP‑server programmatisch kunt verwijderen of hernoemen:
# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")
Berichten aan specifieke mappen maken en toevoegen
Met de Aspose.Email‑API kun je de MailMessage en ImapClient klassen om een nieuw bericht aan een map toe te voegen. Maak eerst een MailMessage object door onderwerp, afzender en ontvanger op te geven. Abonneer je vervolgens op een map en voeg het bericht toe. Het onderstaande codefragment toont hoe je een nieuw bericht aan een map toevoegt:
- Initialiseer de IMAP‑client met de ImapClient klasse om verbinding te maken met je e‑mailserver. Geef het serveradres, poort, gebruikersnaam en wachtwoord op.
- Selecteer de doelmap waarin je het nieuwe bericht wilt toevoegen, bijvoorbeeld "Inbox", met de select_folder-methode.
- Maak een nieuwe e‑mail aan met de MailMessage klasse. Specificeer de afzender, ontvanger, onderwerp en berichtinhoud.
- Abonneer je op de map met de subscribe_folder-methode en de naam van de map.
- Voeg het nieuw aangemaakte bericht toe aan de geselecteerde map met de append_message-methode, waarbij je de mapnaam en het berichtobject opgeeft.
Berichten verplaatsen tussen mappen
Aspose.Email voor .NET maakt het mogelijk berichten van de ene mailboxmap naar de andere te verplaatsen met de ImapClient API. De move_message-methode gebruikt de unieke id van het bericht en de naam van de bestemmingsmap om een bericht naar de bestemmingsmap te verplaatsen. Het onderstaande codefragment laat zien hoe je berichten tussen mappen verplaatst:
Berichten tussen mappen kopiëren
De Aspose.Email‑API maakt het eenvoudig om berichten van de ene mailboxmap naar de andere te kopiëren. Je kunt één bericht of meerdere berichten kopiëren met de copy_message- en copy_messages-methoden. De copy_messages-methode stelt je in staat meerdere berichten van een bronmap naar een bestemmingsmap binnen de mailbox te verplaatsen. Hieronder staat een codefragment dat laat zien hoe je berichten tussen mappen kopieert:
Werken met speciaal‑gebruik mailboxmappen
Speciaal‑gebruik mailboxen zijn vooraf gedefinieerde mappen in een e‑mailsysteem die zijn bedoeld voor specifieke typen berichten, zoals Verzonden, Concepten, Spam, Prullenbak en Archief. De Aspose.Email‑bibliotheek vereenvoudigt de toegang tot deze mailboxen door attributen aan hun rollen en doeleinden te koppelen. Dit stelt clients in staat deze mappen automatisch te ontdekken en weer te geven zonder gebruikersinterventie.
Het onderstaande codefragment toont hoe je informatie over belangrijke speciaal‑gebruik mailboxen (Inbox, Concepten, Spam, Verzonden en Prullenbak) kunt ophalen met behulp van de eigenschappen van de ImapMailBoxInfo klasse en de details afdrukken:
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)
Mappen openen en berichten recursief lezen
ImapClient gebruikt de recursieve methode om mappen en submappen van de IMAP‑server te lijsten. Deze methode wordt ook gebruikt om berichten te lezen en op te slaan op de lokale schijf in MSG‑formaat. Zowel mappen als berichten worden aangemaakt en opgeslagen in dezelfde hiërarchische structuur als op de IMAP‑server. Hieronder staat een codefragment dat laat zien hoe je mappen en berichten recursief ophaalt:
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.")
MultiConnection gebruiken voor batch‑mapbewerkingen
Aspose.Email maakt het mogelijk de client zo te configureren dat er meerdere gelijktijdige verbindingen met de IMAP‑server tot stand worden gebracht. Dit verhoogt niet per se de prestaties, maar is een betrouwbare oplossing voor gelijktijdige bewerkingen. Dit is vooral nuttig wanneer de client meerdere taken tegelijk moet uitvoeren, zoals verschillende e‑mailmappen ophalen, grote hoeveelheden data synchroniseren of meerdere berichten gelijktijdig verwerken.
Het onderstaande codefragment toont hoe je meerdere verbindingen met de IMAP‑server kunt opzetten tijdens het uploaden van een verzameling e‑mailberichten met de ‘append_messages’-methode van de ImapClient klasse:
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)