Ambil dan Daftar Email dari Server IMAP

Daftar Pesan dari Kotak Surat

Metode ’list_messages’ dari ImapClient kelas mengambil daftar semua pesan dari folder yang dipilih saat ini ("Inbox" dalam kasus ini). Daftar ini berisi objek metadata pesan, yang biasanya mencakup informasi seperti ID pesan, nomor urut, UID, dan mungkin data ringkasan seperti subjek atau informasi pengirim.

Potongan kode berikut menunjukkan cara mengambil metadata pesan dari Inbox, dan mencetak jumlah total pesan yang ada:

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

Daftar Pesan dengan Dukungan Paging

Dalam skenario di mana server email berisi banyak pesan dalam kotak surat, seringkali diinginkan untuk menampilkan atau mengambil pesan dengan dukungan paging. Aspose.Email ImapClient kelas memungkinkan Anda mengambil pesan dari server dengan dukungan paging.

Daftar Pesan secara Rekursif

Protokol IMAP memungkinkan pencantuman pesan secara rekursif dari folder kotak surat. Ini juga memungkinkan pencantuman pesan dari subfoldernya. Potongan kode di bawah menunjukkan cara mencantumkan pesan secara rekursif:

Daftar MIME Message ID

The ImapMessageInfo kelas menawarkan cara praktis untuk mengakses MIME MessageId untuk mengidentifikasi pesan tanpa harus mengekstrak seluruh konten pesan. Berikut adalah potongan kode yang menunjukkan cara mencantumkan MIME MessageId:

Daftar Pesan dengan MultiConnection

The ImapClient kelas menawarkan properti use_multi_connection, yang memungkinkan penggunaan banyak koneksi untuk operasi dengan beban berat. Selain itu, Anda dapat menentukan jumlah koneksi dalam mode multi‑connection menggunakan properti connections_quantity. Potongan kode berikut menggambarkan cara memanfaatkan mode multi‑connection untuk mencantumkan pesan:

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)

Harap dicatat bahwa penggunaan mode ini tidak selalu harus meningkatkan performa.

Ambil Pesan berdasarkan Nomor Urut atau ID Unik

API Aspose.Email memungkinkan Anda menghasilkan dua daftar pesan, satu berisi nomor urut dan satu lagi berisi ID unik semua pesan di inbox. Untuk mengambil pesan dari server IMAP berdasarkan identifier mereka, gunakan metode fetch_messages dari ImapClient kelas. Potongan kode di bawah menunjukkan cara mencantumkan pesan berdasarkan identifier:

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

Ambil Pesan dalam Urutan Menurun

Tugas ini dicapai dengan mendefinisikan pengaturan pagination untuk pengambilan pesan. Untuk tujuan ini, gunakan properti ascending_sorting dari PageSettings kelas yang merupakan bagian dari modul klien IMAP. Atur atribut ascending_sorting pada PageSettings objek menjadi False. Ini menunjukkan bahwa pesan harus diurutkan secara menurun secara default selama pengambilan. Potongan kode berikut menunjukkan cara mengambil pesan dalam urutan menurun:

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)

Ambil Pesan dari Server dan Simpan ke Disk

The ImapClient kelas dapat mengambil pesan dari server IMAP dan menyimpannya dalam format EML ke disk lokal. Langkah-langkah berikut diperlukan untuk menyimpan pesan ke disk:

  1. Gunakan ImapClient kelas dengan parameter yang diperlukan (host, port, username, password) untuk terhubung ke server IMAP.
  2. Pilih folder yang diinginkan dengan memanggil metode select_folder (misalnya, "Inbox")
  3. Ambil pesan dengan iterasi menggunakan metode list_messages.
  4. Untuk menyimpan pesan, untuk setiap pesan, gunakan metode save_message dengan menentukan direktori, dan menambahkan ID unik ke nama file untuk keunikan.

Potongan kode berikut menunjukkan cara mengambil pesan email dari server dan menyimpannya:

Simpan Pesan dalam Format MSG

Untuk menyimpan email dalam format MSG, panggil metode fetch_message dari ImapClient kelas. Ini mengembalikan pesan dalam sebuah instance dari MailMessage kelas. Metode MailMessage.save() kemudian dapat dipanggil untuk menyimpan pesan ke MSG. Potongan kode berikut menunjukkan cara menyimpan pesan dalam Format MSG.

Ambil Parameter Pesan Ekstra (Info Ringkasan)

Potongan kode berikut menunjukkan cara berinteraksi dengan server email menggunakan Aspose.Email ImapClient untuk mengirim dan memanipulasi pesan email. Kode ini menggunakan UID pesan untuk mengambil informasi ringkasan dengan parameter tambahan ("X-GM-MSGID", "X-GM-THRID"). Informasi serupa diambil menggunakan nomor urut.

Dapatkan Header List-Unsubscribe

Header "ListUnsubscribe" biasanya disertakan dalam header pesan email yang dikirim oleh milis atau sistem email otomatis. Header ini menyediakan tautan atau alamat email yang dapat digunakan penerima untuk berhenti berlangganan dari milis atau email otomatis. Aspose.Email menyediakan properti ’list_unsubscribe’ dari ImapMessageInfo kelas untuk mengambil header ini. Potongan kode di bawah menunjukkan penggunaan properti tersebut dan dapat digunakan sebagai bagian dari sistem untuk mengotomatisasi proses berhenti berlangganan dari email yang tidak diinginkan:

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)

Dapatkan Informasi Identifikasi Pesan

Saat mengambil dan memproses pesan email, Anda dapat mengambil detail pesan menggunakan nomor urut mereka.

Fitur berikut digunakan untuk berinteraksi dengan kotak surat IMAP:

Potongan kode berikut menunjukkan cara memperoleh info identifikasi tentang pesan:

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)

Daftar Lampiran dari Pesan Email IMAP

Untuk mendapatkan informasi tentang lampiran seperti nama, ukuran tanpa mengambil data lampiran, gunakan sumber perpustakaan berikut:

Contoh kode di bawah menunjukkan cara mencantumkan lampiran untuk setiap pesan email menggunakan 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})")