ดึงและแสดงรายการอีเมลจากเซิร์ฟเวอร์ IMAP

แสดงรายการข้อความจากกล่องจดหมาย

เมธอด ’list_messages’ ของ ImapClient คลาสดึงรายการของข้อความทั้งหมดจากโฟลเดอร์ที่เลือกในขณะนี้ (ในกรณีนี้คือ "Inbox") รายการนี้มีวัตถุเมตาดาต้าของข้อความซึ่งมักรวมถึงข้อมูลเช่น ID ของข้อความ, หมายเลขลำดับ, UID และอาจมีข้อมูลสรุปเช่นหัวเรื่องหรือข้อมูลผู้ส่ง

โค้ดสแน็ปด้านล่างแสดงวิธีดึงข้อมูลเมตาดาต้าของข้อความจากกล่องขาเข้าและพิมพ์จำนวนข้อความทั้งหมดที่มี:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.select_folder("Inbox")

messages = client.list_messages()
print(f"Total Messages: {len(messages)}")

แสดงรายการข้อความด้วยการสนับสนุนการแบ่งหน้า

ในกรณีที่เซิร์ฟเวอร์อีเมลมีข้อความจำนวนมากในกล่องจดหมาย มักต้องการแสดงรายการหรือดึงข้อความโดยสนับสนุนการแบ่งหน้า Aspose.Email ImapClient คลาสที่ให้คุณดึงข้อความจากเซิร์ฟเวอร์ตามการสนับสนุนการแบ่งหน้า.

แสดงรายการข้อความแบบเรียกซ้ำ

โปรโตคอล IMAP อนุญาตให้แสดงรายการข้อความจากโฟลเดอร์กล่องจดหมายแบบเรียกซ้ำ ซึ่งทำให้สามารถแสดงรายการข้อความจากโฟลเดอร์ย่อยได้ด้วย โค้ดสแน็ปด้านล่างแสดงวิธีแสดงรายการข้อความแบบเรียกซ้ำ:

แสดงรายการ MIME Message IDs

นี้ ImapMessageInfo คลาสให้วิธีที่สะดวกในการเข้าถึง MIME MessageId เพื่อระบุตัวข้อความโดยไม่ต้องสกัดเนื้อหาข้อความทั้งหมด ด้านล่างเป็นโค้ดสแน็ปที่แสดงวิธีแสดงรายการ MIME MessageId:

แสดงรายการข้อความด้วย MultiConnection

นี้ ImapClient คลาสมีคุณสมบัติ use_multi_connection ที่ทำให้ใช้การเชื่อมต่อหลายครั้งสำหรับการดำเนินการที่มีโหลดสูง นอกจากนี้คุณสามารถระบุจำนวนการเชื่อมต่อในโหมดหลายการเชื่อมต่อโดยใช้คุณสมบัติ connections_quantity ตัวอย่างโค้ดต่อไปนี้แสดงวิธีใช้โหมดหลายการเชื่อมต่อสำหรับการแสดงรายการข้อความ:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.select_folder("Inbox")
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE

message_info_col = client.list_messages(True)

โปรดทราบว่า การใช้โหมดนี้ไม่ได้จำเป็นต้องทำให้ประสิทธิภาพเพิ่มขึ้น

ดึงข้อความตามหมายเลขลำดับหรือ ID เฉพาะ

API ของ Aspose.Email อนุญาตให้คุณสร้างรายการข้อความสองรายการ หนึ่งที่มีหมายเลขลำดับและอีกหนึ่งที่มี ID เฉพาะของข้อความทั้งหมดในกล่องจดหมาย เพื่อดึงข้อความจากเซิร์ฟเวอร์ IMAP ตามตัวระบุ ให้ใช้เมธอด fetch_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)

# List messages
message_info_col = client.list_messages()
print("ListMessages Count:", message_info_col.count)

# Get sequence numbers and unique IDs
sequence_number_ar = [mi.sequence_number for mi in message_info_col]
unique_id_ar = [mi.unique_id for mi in message_info_col]

# Fetch messages by sequence number
fetched_messages_by_snum = client.fetch_messages(sequence_number_ar)
print("FetchMessages-sequenceNumberAr Count:", len(fetched_messages_by_snum))

# Fetch messages by UID
fetched_messages_by_uid = client.fetch_messages(unique_id_ar)
print("FetchMessages-uniqueIdAr Count:", len(fetched_messages_by_uid))

ดึงข้อความในลำดับจากมากไปน้อย

งานนี้ทำได้โดยกำหนดการตั้งค่าการแบ่งหน้าสำหรับการดึงข้อความ เพื่อวัตถุประสงค์นี้ใช้คุณสมบัติ ascending_sorting ของ PageSettings คลาสที่เป็นส่วนหนึ่งของโมดูลไคลเอนต์ IMAP ตั้งแอต tribute ascending_sorting บน PageSettings ตั้งวัตถุเป็น False ซึ่งบ่งบอกว่าข้อความควรเรียงลำดับจากมากไปน้อยโดยค่าเริ่มต้นระหว่างการดึง โค้ดสแน็ปต่อไปนี้แสดงวิธีดึงข้อความในลำดับจากมากไปน้อย:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

page_settings = ae.clients.imap.PageSettings
page_settings.ascending_sorting = False
page_info = client.list_messages_by_page(5, page_settings)
messages = page_info.items

for message in messages:
    print(message.subject)

ดึงข้อความจากเซิร์ฟเวอร์และบันทึกลงดิสก์

นี้ ImapClient คลาสสามารถดึงข้อความจากเซิร์ฟเวอร์ IMAP และบันทึกเป็นรูปแบบ EML ลงบนดิสก์ท้องถิ่น ขั้นตอนต่อไปนี้จำเป็นเพื่อบันทึกข้อความลงดิสก์:

  1. ใช้ ImapClient คลาสพร้อมพารามิเตอร์ที่จำเป็น (host, port, username, password) เพื่อเชื่อมต่อกับเซิร์ฟเวอร์ IMAP
  2. เลือกโฟลเดอร์ที่ต้องการโดยเรียกเมธอด select_folder (เช่น "Inbox")
  3. ดึงข้อความโดยวนผ่านด้วยเมธอด list_messages
  4. เพื่อบันทึกข้อความ สำหรับแต่ละข้อความ ให้ใช้เมธอด save_message ระบุไดเรกทอรีและเพิ่ม ID เฉพาะลงในชื่อไฟล์เพื่อความไม่ซ้ำกัน

โค้ดสแน็ปต่อไปนี้แสดงวิธีดึงข้อความอีเมลจากเซิร์ฟเวอร์และบันทึกไว้:

บันทึกข้อความในรูปแบบ MSG

เพื่อบันทึกอีเมลในรูปแบบ MSG ให้เรียกเมธอด fetch_message ของ ImapClient คลาส จะคืนค่าข้อความในอินสแตนซ์ของ MailMessage คลาส เมธอด MailMessage.save() สามารถเรียกเพื่อบันทึกข้อความเป็น MSG ตัวอย่างโค้ดต่อไปนี้แสดงวิธีบันทึกข้อความในรูปแบบ MSG.

ดึงพารามิเตอร์เพิ่มเติมของข้อความ (ข้อมูลสรุป)

โค้ดสแน็ปด้านล่างแสดงวิธีโต้ตอบกับเซิร์ฟเวอร์อีเมลโดยใช้ Aspose.Email ImapClient เพื่อส่งและจัดการข้อความอีเมล โค้ดใช้ UID ของข้อความเพื่อดึงข้อมูลสรุปพร้อมพารามิเตอร์พิเศษ ("X-GM-MSGID", "X-GM-THRID") ข้อมูลคล้ายกันดึงโดยใช้หมายเลขลำดับ

รับส่วนหัว List-Unsubscribe

ส่วนหัว "ListUnsubscribe" มักจะรวมอยู่ในส่วนหัวของข้อความอีเมลที่ส่งโดยรายการจดหมายหรือระบบอีเมลอัตโนมัติ มันให้ลิงก์หรือที่อยู่อีเมลที่ผู้รับสามารถใช้เพื่อยกเลิกการสมัครจากรายการจดหมายหรืออีเมลอัตโนมัติ Aspose.Email มีคุณสมบัติ ’list_unsubscribe’ ของ ImapMessageInfo คลาสเพื่อดึงส่วนหัวนี้ ตัวอย่างโค้ดด้านล่างแสดงการใช้คุณสมบัติและสามารถใช้เป็นส่วนหนึ่งของระบบเพื่ออัตโนมัติกระบวนการยกเลิกการสมัครรับอีเมลที่ไม่ต้องการ:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

message_info_col = client.list_messages()

# Iterate through each message
for imap_message_info in message_info_col:
    print("ListUnsubscribe Header:", imap_message_info.list_unsubscribe)

รับข้อมูลการระบุตัวข้อความ

เมื่อดึงและประมวลผลอีเมล คุณสามารถดึงรายละเอียดของข้อความโดยใช้หมายเลขลำดับของมัน.

คุณลักษณะต่อไปนี้ใช้ในการโต้ตอบกับกล่องจดหมาย IMAP:

โค้ดสแน็ปด้านล่างแสดงวิธีรับข้อมูลการระบุตัวตนของข้อความ:

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

msg_infos = client.list_messages("INBOX")

for msg_info in msg_infos:
    # fetch by sequence number
    msg = client.fetch_message(msg_info.sequence_number)

    # fetch by unique id
    msg = client.fetch_message(msg_info.unique_id)

แสดงรายการไฟล์แนบจากอีเมล IMAP

เพื่อรับข้อมูลเกี่ยวกับไฟล์แนบเช่น ชื่อ, ขนาดโดยไม่ต้องดึงข้อมูลไฟล์แนบ ใช้แหล่งข้อมูลของไลบรารีต่อไปนี้:

  • ImapAttachmentInfo คลาส - แสดงข้อมูลไฟล์แนบ (ขนาด, ชื่อ, ประเภทสื่อ)

  • ImapAttachmentInfoCollection คลาส - แสดงคอลเลกชันของ ImapAttachmentInfo.

  • เมธอด list_attachments(sequence_number) ของ ImapClient คลาส - ได้รับอ็อบเจกต์ที่สามารถวนหรือคอลเลกชันของข้อมูลไฟล์แนบสำหรับข้อความ

ตัวอย่างโค้ดด้านล่างแสดงวิธีแสดงรายการไฟล์แนบสำหรับแต่ละอีเมลโดยใช้ Aspose.Email ImapClient:

# List messages
message_info_col = client.list_messages()

# Iterate through each message
for message_info in message_info_col:
    print(f"Attachments for message with sequence number {message_info.sequence_number}:")

    # List attachments for the current message
    attachment_info_col = client.list_attachments(message_info.sequence_number)

    # Iterate through each attachment
    for attachment_info in attachment_info_col:
        print(f"Attachment: {attachment_info.name} (size: {attachment_info.size})")