مدیریت پوشهها بر روی سرور IMAP در پایتون
فهرست پوشههای 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")
ایجاد و افزودن پیامها به پوشههای مخصوص
با API Aspose.Email میتوانید از 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 امکان انتقال چندین پیام از یک پوشه منبع به پوشه مقصد درون صندوقپست را میدهد. در زیر قطعه کد برای کپی کردن پیامها بین پوشهها آورده شده است:
کار با پوشههای صندوقپست خاص استفاده
صندوقپستهای خاص استفاده، پوشههای پیشتعریفشدهای در سیستم ایمیل هستند که برای مدیریت انواع خاص پیامها مانند Sent، Drafts، Junk، Trash و Archive طراحی شدهاند. کتابخانه 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)