دریافت و فهرست ایمیل‌ها از سرور IMAP

فهرست پیام‌ها از صندوق پستی

متد ’list_messages’ کلاس ImapClient کلاس فهرستی از تمام پیام‌ها را از پوشه انتخاب‌شده فعلی (در این مثال "Inbox") دریافت می‌کند. این فهرست شامل اشیای متادیتای پیام است که معمولاً شامل شناسه‌های پیام، شماره‌های توالی، 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

این ImapMessageInfo کلاس روشی راحت برای دسترسی به MIME MessageId برای شناسایی پیام‌ها بدون نیاز به استخراج کل محتوا فراهم می‌کند. در ادامه قطعه کدی نشان داده شده است که نحوه فهرست‌گذاری MIME MessageId را نشان می‌دهد:

فهرست پیام‌ها با چنداتصال

این 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)

لطفاً توجه داشته باشید که استفاده از این حالت لزوماً به افزایش عملکرد منجر نمی‌شود.

دریافت پیام‌ها بر اساس شماره توالی یا شناسه یکتا

API Aspose.Email به شما امکان می‌دهد دو فهرست پیام تولید کنید، یکی شامل شماره‌های توالی و دیگری شامل شناسه‌های یکتای تمام پیام‌های صندوق ورودی. برای دریافت پیام‌ها از سرور 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 است. ویژگی 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 استفاده کنید و مسیر پوشه را مشخص کنید و شناسه یکتا را به نام پرونده اضافه کنید تا یکتا باشد.

قطعه کد زیر نشان می‌دهد چگونه پیام‌های ایمیل را از سرور دریافت کرده و ذخیره کنید:

ذخیره پیام‌ها در قالب 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})")