Kelola Folder di Server IMAP dengan Python
Daftar Folder IMAP
Mengambil informasi folder dari server IMAP menjadi mudah dengan Aspose.Email. Ikuti langkah-langkah di bawah untuk mengambil dan bekerja dengan detail folder:
- Gunakan metode list_folders() dari Aspose.Email ImapClient kelas. Metode ini mengembalikan instance dari ImapFolderInfoCollection, yang berisi detail tentang semua folder.
- Lakukan perulangan pada ImapFolderInfoCollection objek untuk mengakses informasi tentang folder individu.
- Ambil subfolder (opsional). Metode list_folders() di‑overload. Anda dapat memberi nama folder sebagai parameter untuk mengambil koleksi subfolder untuk folder yang ditentukan.
Potongan kode berikut menunjukkan cara mengambil informasi folder dari server IMAP menggunakan metode Aspose.Email:
Ganti Nama dan Hapus Folder
Aspose.Email menyediakan metode dari ImapClient kelas untuk mengelola folder pada server email melalui IMAP:
- metode delete_folder - menghapus folder secara permanen beserta semua pesan yang ada di dalamnya.
- metode rename_folder - mengubah nama folder tanpa mengubah isi di dalamnya.
Potongan kode di bawah menunjukkan cara menghapus atau mengganti nama folder pada server IMAP secara programatis:
# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")
Buat dan Tambahkan Pesan ke Folder Tertentu
Dengan API Aspose.Email, Anda dapat menggunakan MailMessage dan ImapClient kelas untuk menambahkan pesan baru ke sebuah folder. Pertama, buat sebuah MailMessage objek dengan menentukan subjek, pengirim, dan penerima. Kemudian, berlangganan ke sebuah folder dan menambahkan pesan ke dalamnya. Potongan kode di bawah menunjukkan cara menambahkan pesan baru ke sebuah folder:
- Inisialisasi klien IMAP menggunakan ImapClient kelas untuk terhubung ke server email Anda. Berikan alamat server, port, nama pengguna, dan kata sandi.
- Pilih folder target tempat Anda ingin menambahkan pesan baru, seperti "Inbox", menggunakan metode select_folder.
- Buat email baru menggunakan MailMessage kelas. Tentukan pengirim, penerima, subjek, dan konten pesan.
- Berlangganan ke folder menggunakan metode subscribe_folder dengan nama folder.
- Tambahkan pesan yang baru dibuat ke folder yang dipilih menggunakan metode append_message, dengan menentukan nama folder dan objek pesan.
Pindahkan Pesan antar Folder
Aspose.Email untuk .NET memungkinkan memindahkan pesan dari satu folder kotak surat ke folder lain menggunakan ImapClient API. Metode move_message menggunakan ID unik pesan dan nama folder tujuan untuk memindahkan pesan ke folder tujuan. Potongan kode berikut menunjukkan cara memindahkan pesan antar folder:
Salin Pesan Antar Folder
API Aspose.Email memungkinkan Anda menyalin pesan dari satu folder kotak surat ke folder lain dengan mudah. Anda dapat menyalin satu pesan atau beberapa pesan menggunakan metode copy_message dan copy_messages. Metode copy_messages memungkinkan Anda mentransfer banyak pesan dari folder sumber ke folder tujuan dalam kotak surat. Berikut adalah potongan kode yang menunjukkan cara menyalin pesan antar folder:
Bekerja dengan Folder Mailbox Khusus
Mailbox khusus adalah folder yang telah ditentukan sebelumnya dalam sistem email yang dirancang untuk menangani jenis pesan tertentu, seperti Sent, Drafts, Junk, Trash, dan Archive. Pustaka Aspose.Email mempermudah akses ke mailbox ini dengan mengaitkan atribut dengan peran dan tujuan mereka. Hal ini memungkinkan klien secara otomatis menemukan dan menampilkan folder tersebut tanpa memerlukan intervensi pengguna.
Potongan kode berikut menunjukkan cara mengambil informasi tentang mailbox khusus penting (Inbox, Drafts, Junk, Sent, dan Trash) menggunakan properti dari ImapMailBoxInfo kelas dan cetak detailnya:
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)
Akses Folder dan Baca Pesan Secara Rekursif
ImapClient menggunakan metode rekursif untuk menampilkan folder dan subfolder dari server IMAP. Metode ini juga digunakan untuk membaca dan menyimpan pesan ke disk lokal dalam format MSG. Baik folder maupun pesan dibuat dan disimpan dalam struktur hierarki yang sama seperti yang muncul di server IMAP. Berikut adalah potongan kode yang menunjukkan cara mengambil folder dan pesan secara rekursif:
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.")
Gunakan MultiConnection untuk Operasi Folder Batch
Aspose.Email memungkinkan konfigurasi klien untuk membuat beberapa koneksi simultan ke server IMAP. Hal ini tidak selalu meningkatkan performa, namun merupakan solusi andal untuk operasi bersamaan. Ini sangat berguna jika klien perlu melakukan beberapa tugas sekaligus, seperti mengambil folder email yang berbeda, menyinkronkan data dalam jumlah besar, atau memproses beberapa pesan secara bersamaan.
Potongan kode di bawah menunjukkan cara membuat beberapa koneksi ke server IMAP sambil mengunggah kumpulan pesan email menggunakan metode ‘append_messages’ dari ImapClient kelas:
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)