Управление на папки на IMAP сървър в Python
Списък на IMAP папки
Извличането на информация за папка от IMAP сървър е просто с Aspose.Email. Следвайте стъпките по-долу, за да извлечете и работите с детайлите на папката:
- Използвайте метода list_folders() от Aspose.Email ImapClient клас. Този метод връща инстанция на ImapFolderInfoCollection, който съдържа детайли за всички папки.
- Обходете ImapFolderInfoCollection обект за достъп до информация за отделни папки.
- Извличане на подпапки (по избор). Методът list_folders() е претоварен. Можете да подадете име на папка като параметър, за да извлечете колекция от подпапки за зададената папка.
Следният кодов откъс демонстрира как да се извлече информация за папка от IMAP сървър, използвайки метода Aspose.Email:
Преименуване и изтриване на папки
Aspose.Email предоставя методи на ImapClient клас за управление на папки на имейл сървър чрез IMAP:
- Метод delete_folder – окончателно премахва папката и всички съобщения, съдържащи се в нея.
- Метод rename_folder – променя името на папката, без да променя съдържанието в нея.
Следният кодов откъс показва как програмено да изтриете или преименувате папки на IMAP сървъра:
# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")
Създаване и добавяне на съобщения към конкретни папки
С помощта на Aspose.Email API можете да използвате MailMessage и ImapClient класове за добавяне на ново съобщение към папка. Първо, създайте MailMessage обект, като зададете темата, подателя и получателя. След това се абонирайте за папка и добавете съобщението към нея. Следният кодов откъс демонстрира как да се добави ново съобщение към папка:
- Инициализирайте IMAP клиента, използвайки ImapClient клас за свързване към вашия имейл сървър. Посочете адреса на сървъра, порта, потребителското име и паролата.
- Изберете целевата папка, където искате да добавите новото съобщение, например "Inbox", като използвате метода select_folder.
- Създайте нов имейл, използвайки MailMessage клас. Укажете подателя, получателя, темата и съдържанието на съобщението.
- Абонирайте се за папката, като използвате метода subscribe_folder с името на папката.
- Добавете новосъздаденото съобщение към избраната папка, използвайки метода append_message, като укажете името на папката и обекта на съобщението.
Преместване на съобщения между папки
Aspose.Email за .NET позволява преместване на съобщения от една папка в пощенска кутия към друга, използвайки ImapClient API. Методът move_message използва уникалния идентификатор на съобщението и името на целевата папка за преместване на съобщението към целевата папка. Следният кодов откъс показва как да преместите съобщения между папки:
Копиране на съобщения между папки
API‑то Aspose.Email ви позволява лесно да копирате съобщения от една папка в пощенска кутия към друга. Можете да копирате едно съобщение или множество съобщения, използвайки методите copy_message и copy_messages. Методът copy_messages ви позволява да прехвърлите множество съобщения от изходна папка към целева папка в пощенската кутия. По-долу е кодов откъс, демонстриращ как да копирате съобщения между папки:
Работа със специални пощенски кутии
Пощенските кутии със специална употреба са предварително дефинирани папки в имейл система, предназначени за обработка на специфични типове съобщения, като Изпратени, Чернови, Спам, Кошче и Архив. Библиотеката Aspose.Email опростява достъпа до тези кутии, като асоциира атрибути с техните роли и предназначения. Това позволява на клиентите автоматично да откриват и показват тези папки без нужда от намеса от потребителя.
Следният кодов откъс демонстрира как да се извлече информация за ключови пощенски кутии със специална употреба (Inbox, Drafts, Junk, Sent и Trash), използвайки свойствата на ImapMailBoxInfo клас и отпечатайте детайлите:
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)
Достъп до папки и рекурсивно четене на съобщения
ImapClient използва рекурсивния метод за изброяване на папки и подпапки от IMAP сървъра. Този метод се използва също за четене и запазване на съобщения на локалния диск във формат MSG. И папките, и съобщенията се създават и запазват в същата йерархична структура, както се появяват на IMAP сървъра. По-долу е кодов откъс, демонстриращ как рекурсивно да се извлечат папки и съобщения:
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 за пакетни операции с папки
Aspose.Email прави възможно конфигурирането на клиента за установяване на множество едновременно активни връзки към IMAP сървъра. Това не е задължително да увеличи производителността, но е надеждно решение за паралелни операции. Това е особено полезно, ако клиентът трябва да изпълнява множество задачи едновременно, като например извличане на различни имейл папки, синхронизация на големи обеми данни или обработка на множество съобщения едновременно.
Следният кодов откъс показва как да се установят множество връзки към IMAP сървъра, докато се качва колекция от имейл съобщения, използвайки метода ‘append_messages’ на ImapClient клас:
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)