จัดการโฟลเดอร์บนเซิร์ฟเวอร์ 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 คลาสเพื่อเพิ่มข้อความใหม่ลงในโฟลเดอร์ ก่อนอื่นสร้าง a MailMessage อ็อบเจกต์โดยระบุหัวเรื่อง, ผู้ส่ง และผู้รับ จากนั้นสมัครสมาชิกโฟลเดอร์และเพิ่มข้อความลงในนั้น ตัวอย่างโค้ดด้านล่างแสดงวิธีเพิ่มข้อความใหม่ลงในโฟลเดอร์:
- เริ่มต้นไคลเอนต์ IMAP ด้วย ImapClient คลาสเพื่อเชื่อมต่อกับเซิร์ฟเวอร์อีเมลของคุณ ระบุที่อยู่เซิร์ฟเวอร์, พอร์ต, ชื่อผู้ใช้, และรหัสผ่าน
- เลือกโฟลเดอร์เป้าหมายที่คุณต้องการเพิ่มข้อความใหม่ เช่น "Inbox" โดยใช้วิธี select_folder
- สร้างอีเมลใหม่โดยใช้ MailMessage คลาส ระบุผู้ส่ง, ผู้รับ, เรื่อง, และเนื้อหาข้อความ.
- สมัครสมาชิกโฟลเดอร์โดยใช้วิธี subscribe_folder พร้อมชื่อโฟลเดอร์
- เพิ่มข้อความที่สร้างใหม่ลงในโฟลเดอร์ที่เลือกโดยใช้วิธี append_message ระบุชื่อโฟลเดอร์และอ็อบเจกต์ของข้อความ
การย้ายข้อความระหว่างโฟลเดอร์
Aspose.Email สำหรับ .NET อนุญาตให้ย้ายข้อความจากโฟลเดอร์กล่องจดหมายหนึ่งไปยังอีกโฟลเดอร์โดยใช้ ImapClient API วิธี move_message ใช้ id ที่ไม่ซ้ำของข้อความและชื่อโฟลเดอร์ปลายทางเพื่อย้ายข้อความไปยังโฟลเดอร์ปลายทาง ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการย้ายข้อความระหว่างโฟลเดอร์:
คัดลอกข้อความระหว่างโฟลเดอร์
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)