Python'da IMAP Sunucusundaki Klasörleri Yönet
IMAP Klasörlerini Listele
Aspose.Email ile bir IMAP sunucusundan klasör bilgilerini almak basittir. Aşağıdaki adımları izleyerek klasör detaylarını alın ve üzerlerinde çalışın:
- Aspose.Email’den list_folders() yöntemini kullanın ImapClient sınıf. Bu yöntem, bir örnek döndürür ImapFolderInfoCollection, tüm klasörlerin detaylarını içerir.
- Döngüyle gezin ImapFolderInfoCollection tek tek klasörlerin bilgilerine erişmek için nesne.
- Alt klasörleri al (isteğe bağlı). list_folders() yöntemi aşırı yüklenmiştir. Belirtilen klasör için alt klasörlerin bir koleksiyonunu almak üzere bir klasör adı parametresi geçirebilirsiniz.
Aşağıdaki kod parçacığı, Aspose.Email yöntemi kullanarak bir IMAP sunucusundan klasör bilgilerini almayı gösterir:
Klasörleri Yeniden Adlandırma ve Silme
Aspose.Email, şunun yöntemlerini sağlar: ImapClient IMAP üzerinden bir e-posta sunucusundaki klasörleri yönetmek için sınıf:
- delete_folder yöntemi - klasörü ve içindeki tüm mesajları kalıcı olarak siler.
- rename_folder yöntemi - klasörün adını içeriğini değiştirmeden değiştirir.
Aşağıdaki kod parçacığı, IMAP sunucusunda klasörleri programlı olarak silme veya yeniden adlandırma yöntemini gösterir:
# Delete a folder and Rename a folder
client.delete_folder("foldername")
client.rename_folder("foldername", "newfoldername")
Belirli Klasörlere Mesaj Oluşturma ve Ekleme
Aspose.Email API ile şunu kullanabilirsiniz: MailMessage ve ImapClient bir klasöre yeni mesaj eklemek için sınıflar. İlk olarak bir … oluşturun MailMessage konu, gönderici ve alıcı belirterek nesneyi oluşturun. Ardından bir klasöre abone olun ve mesajı ona ekleyin. Aşağıdaki kod parçacığı, bir klasöre yeni bir mesaj eklemeyi gösterir:
- IMAP istemcisini şu şekilde başlatın: ImapClient e-posta sunucunuza bağlanmak için sınıf. Sunucu adresi, port, kullanıcı adı ve şifreyi sağlayın.
- select_folder yöntemini kullanarak yeni mesajı eklemek istediğiniz hedef klasörü (örneğin "Inbox") seçin.
- Şunu kullanarak yeni bir e-posta oluşturun: MailMessage sınıf. Gönderen, alıcı, konu ve mesaj içeriğini belirtin.
- subscribe_folder yöntemiyle klasör adına göre klasöre abone olun.
- append_message yöntemini kullanarak yeni oluşturulan mesajı seçilen klasöre ekleyin, klasör adını ve mesaj nesnesini belirterek.
Klasörler Arasında Mesaj Taşıma
Aspose.Email for .NET, bir posta kutusu klasöründen diğerine mesajları … kullanarak taşımaya olanak tanır ImapClient API. move_message yöntemi, bir mesajı hedef klasöre taşımak için mesajın benzersiz kimliğini ve hedef klasör adını kullanır. Aşağıdaki kod parçacığı, mesajları klasörler arasında nasıl taşıyacağınızı gösterir:
Klasörler Arasında Mesaj Kopyalama
Aspose.Email API, bir posta kutusu klasöründen diğerine mesajları zahmetsizce kopyalamanızı sağlar. copy_message ve copy_messages yöntemlerini kullanarak tek bir mesaj ya da birden fazla mesaj kopyalayabilirsiniz. copy_messages yöntemi, bir kaynak klasörden hedef klasöre birden fazla mesajı aktarmanıza imkan verir. Aşağıda, klasörler arasında mesajları kopyalamayı gösteren bir kod parçacığı yer almaktadır:
Özel Kullanım Posta Kutusu Klasörleriyle Çalışma
Özel kullanım posta kutuları, gönderilen, taslak, istenmeyen, çöp ve arşiv gibi belirli mesaj tiplerini işlemek üzere e-posta sisteminde önceden tanımlanmış klasörlerdir. Aspose.Email kütüphanesi, bu posta kutularına rollerine ve amaçlarına göre öznitelikler atayarak erişimi basitleştirir. Bu sayede istemciler, kullanıcı müdahalesi olmadan bu klasörleri otomatik olarak keşfedip görüntüleyebilir.
Aşağıdaki kod parçacığı, ana özel kullanım posta kutuları (Inbox, Drafts, Junk, Sent ve Trash) hakkında bilgileri, … özelliklerini kullanarak almayı göstermektedir: ImapMailBoxInfo sınıf ve detayları yazdır:
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)
Klasörlere Erişim ve Mesajları Özyinelemeli Okuma
ImapClient IMAP sunucusundan klasör ve alt klasörleri listelemek için özyinelemeli yöntemi kullanır. Bu yöntem, mesajları MSG formatında yerel diske okumak ve kaydetmek için de kullanılır. Klasörler ve mesajlar, IMAP sunucusunda göründükleri aynı hiyerarşik yapıda oluşturulur ve kaydedilir. Aşağıda, klasör ve mesajları özyinelemeli olarak almayı gösteren bir kod parçacığı yer almaktadır:
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.")
Toplu Klasör İşlemleri için MultiConnection Kullanımı
Aspose.Email, istemcinin IMAP sunucusuna birden fazla eşzamanlı bağlantı kurmasını yapılandırmayı mümkün kılar. Bu mutlaka performansı artırmaz, ancak eşzamanlı işlemler için güvenilir bir çözümdür. Özellikle istemcinin aynı anda farklı e-posta klasörlerini getirme, büyük miktarda veriyi senkronize etme veya birden fazla mesajı aynı anda işleme gibi birden çok görevi yerine getirmesi gerektiğinde faydalıdır.
Aşağıdaki kod parçacığı, ‘append_messages’ yöntemini kullanarak bir e-posta mesaj koleksiyonunu yüklerken IMAP sunucusuna birden çok bağlantı kurmayı gösterir: ImapClient sınıf:
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)