Lấy và Liệt kê Email từ Máy chủ IMAP

Liệt kê Tin nhắn từ Hộp thư

Phương thức ’list_messages’ của ImapClient lớp lấy danh sách tất cả tin nhắn từ thư mục hiện đang được chọn (trong trường hợp này là "Inbox"). Danh sách này chứa các đối tượng siêu dữ liệu tin nhắn, thường bao gồm thông tin như ID tin nhắn, số thứ tự, UID, và có thể có dữ liệu tóm tắt như tiêu đề hoặc thông tin người gửi.

Đoạn mã dưới đây minh họa cách truy xuất siêu dữ liệu tin nhắn từ Hộp đến, và in ra tổng số tin nhắn mà nó chứa:

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)}")

Liệt kê Tin nhắn với Hỗ trợ Phân trang

Trong các trường hợp, khi máy chủ email chứa số lượng lớn tin nhắn trong hộp thư, thường muốn liệt kê hoặc truy xuất tin nhắn có hỗ trợ phân trang. Aspose.Email ImapClient lớp cho phép bạn truy xuất tin nhắn từ server với hỗ trợ phân trang.

Liệt kê Tin nhắn Đệ quy

Giao thức IMAP cho phép liệt kê đệ quy các tin nhắn từ một thư mục hộp thư. Nó cũng cho phép liệt kê tin nhắn từ các thư mục con của nó. Đoạn mã dưới đây minh họa cách liệt kê tin nhắn một cách đệ quy:

Liệt kê ID Tin nhắn MIME

Cái ImapMessageInfo lớp cung cấp cách tiện lợi để truy cập MIME MessageId nhằm xác định tin nhắn mà không cần trích xuất toàn bộ nội dung tin nhắn. Dưới đây là đoạn mã minh họa cách liệt kê MIME MessageId:

Liệt kê Tin nhắn với MultiConnection

Cái ImapClient lớp cung cấp thuộc tính use_multi_connection, cho phép sử dụng nhiều kết nối cho các thao tác tải nặng. Ngoài ra, bạn có thể chỉ định số lượng kết nối trong chế độ đa kết nối bằng thuộc tính connections_quantity. Đoạn mã sau đây minh họa cách sử dụng chế độ đa kết nối để liệt kê tin nhắn:

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)

Lưu ý rằng việc sử dụng chế độ này không nhất thiết dẫn đến tăng hiệu suất.

Lấy Tin nhắn theo Số Thứ tự hoặc ID Duy nhất

API Aspose.Email cho phép bạn tạo hai danh sách tin nhắn, một chứa số thứ tự và một chứa ID duy nhất của tất cả các tin nhắn trong hộp đến. Để lấy tin nhắn từ máy chủ IMAP theo định danh của chúng, sử dụng phương thức fetch_messages của ImapClient lớp. Đoạn mã dưới đây minh họa cách liệt kê tin nhắn theo định danh:

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))

Lấy Tin nhắn theo Thứ tự Giảm dần

Nhiệm vụ được thực hiện bằng cách định nghĩa cài đặt phân trang cho việc truy xuất tin nhắn. Đối với mục đích này, sử dụng thuộc tính ascending_sorting của PageSettings lớp là một phần của mô-đun client IMAP. Đặt thuộc tính ascending_sorting trên PageSettings đặt đối tượng thành False. Điều này cho biết tin nhắn sẽ được sắp xếp theo thứ tự giảm dần mặc định khi truy xuất. Đoạn mã sau đây cho thấy cách truy xuất tin nhắn theo thứ tự giảm dần:

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)

Lấy Tin nhắn từ Server và Lưu lên Đĩa

Cái ImapClient lớp có thể lấy tin nhắn từ máy chủ IMAP và lưu chúng ở định dạng EML lên ổ đĩa cục bộ. Các bước sau cần thiết để lưu tin nhắn lên đĩa:

  1. Sử dụng ImapClient lớp với các tham số cần thiết (host, port, username, password) để kết nối tới máy chủ IMAP.
  2. Chọn thư mục mong muốn bằng cách gọi phương thức select_folder (ví dụ, "Inbox")
  3. Truy xuất tin nhắn bằng cách lặp qua chúng sử dụng phương thức list_messages.
  4. Để lưu tin nhắn, với mỗi tin nhắn, sử dụng phương thức save_message chỉ định thư mục, và nối ID duy nhất vào tên tệp để đảm bảo tính duy nhất.

Đoạn mã sau đây cho bạn cách lấy các tin nhắn email từ server và lưu chúng:

Lưu tin nhắn ở định dạng MSG

Để lưu email ở định dạng MSG, gọi phương thức fetch_message của ImapClient lớp. Nó trả về tin nhắn dưới dạng một thể hiện của MailMessage lớp. Phương thức MailMessage.save() sau đó có thể được gọi để lưu tin nhắn dưới dạng MSG. Đoạn mã sau đây cho bạn cách lưu tin nhắn ở Định dạng MSG.

Lấy Tham số Tin nhắn Bổ sung (Thông tin Tóm tắt)

Đoạn mã dưới đây minh họa cách tương tác với một máy chủ email bằng Aspose.Email ImapClient để gửi và thao tác các tin nhắn email. Mã sử dụng UID của tin nhắn để truy xuất thông tin tóm tắt với các tham số bổ sung ("X-GM-MSGID", "X-GM-THRID"). Thông tin tương tự được truy xuất bằng số thứ tự.

Lấy Tiêu Đề List-Unsubscribe

Tiêu đề "ListUnsubscribe" thường được bao gồm trong các tiêu đề của email do các danh sách gửi thư hoặc hệ thống email tự động gửi. Nó cung cấp một liên kết hoặc địa chỉ email mà người nhận có thể dùng để hủy đăng ký khỏi danh sách gửi thư hoặc các email tự động. Aspose.Email cung cấp thuộc tính ’list_unsubscribe’ của ImapMessageInfo lớp để lấy tiêu đề này. Đoạn mã dưới đây minh họa cách sử dụng thuộc tính và có thể được dùng như một phần của hệ thống để tự động hoá quá trình hủy đăng ký khỏi các email không mong muốn:

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)

Lấy Thông Tin Định Danh Tin Nhắn

Khi truy xuất và xử lý các tin nhắn email, bạn có thể lấy chi tiết tin nhắn bằng cách sử dụng số thứ tự của chúng.

Các tính năng sau được sử dụng để tương tác với hộp thư IMAP:

Đoạn mã dưới đây cho thấy cách lấy thông tin định danh về tin nhắn:

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)

Liệt kê Tệp đính kèm từ Tin nhắn Email IMAP

Để lấy thông tin về tệp đính kèm như tên, kích thước mà không tải dữ liệu tệp, sử dụng các tài nguyên thư viện sau:

  • ImapAttachmentInfo lớp - Đại diện cho thông tin tệp đính kèm (kích thước, tên, loại media).

  • ImapAttachmentInfoCollection lớp - Đại diện cho tập hợp của ImapAttachmentInfo.

  • phương thức list_attachments(sequence_number) của ImapClient lớp - Lấy một iterable hoặc collection chứa thông tin tệp đính kèm cho tin nhắn.

Mẫu mã dưới đây minh họa cách liệt kê tệp đính kèm cho mỗi tin nhắn email bằng 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})")