Python'da IMAP E-postalarını Ara ve Filtrele
Bir posta kutusundan tüm mesajları getirmek için Aspose.Email, ’list_messages’ metodunu sunar ImapClient sınıf. Belirli koşulları sağlayan yalnızca bu mesajları getirmek için, bir … kabul eden aşırı yüklenmiş ’list_messages’ metodunu kullanabilirsiniz MailQuery argüman olarak. MailQuery sınıf, tarih, konu, gönderen ve alıcı gibi bu koşulları tanımlamak için çeşitli özellikler sunar.
İlk kod örneği, mesajların hem tarih hem de konu bazında nasıl filtreleneceğini gösterir. Ek örnekler, diğer kriterlere göre filtrelemeyi ve daha karmaşık sorgular oluşturmayı sergiler. Ayrıca, API hassas (case-sensitive) arama kriterlerini destekler ve posta kutusundan mesajları filtrelerken arama dizesinin kodlamasını belirtmenize olanak tanır.
IMAP Sunucusundan Mesajları Filtrele ve Getir
Basit bir IMAP Sorgusu Oluştur
Aşağıdaki kod parçacığını kullanarak bir IMAP posta kutusuna bağlanın ve bugün gelen, konu içinde "newsletter" kelimesi geçen mesajları alın.
- Kullanıcı adı ve şifre ile 993 portunu kullanarak IMAP sunucusuna bağlan.
- "Inbox" klasörünü seçerek gelen e-postalarla çalışın.
- Bir örnek oluştur ImapQueryBuilder bir arama sorgusu oluşturmak için.
- Arama kriterlerini belirtin, örneğin, e-postaların konusu "Newsletter" içermeli ve iç tarih bugünün tarihiyle eşleşmelidir.
- Sorguyu oluşturucu üzerinden alarak arama sorgusunu oluştur.
- Kriterleri karşılayan mesajları listelemek için sorguyu kullan.
- Arama kriterlerine uyan mesajların toplam sayısını yazdır.
Karmaşık Arama Kriterleri Oluştur
Aspose.Email, teslim tarihi, bir aralık içinde, belirli gönderici, belirli alan adı veya belirli alıcı gibi e-posta mesajlarını sorgulamak ve filtrelemek için karmaşık arama kriterleri oluşturmayı da mümkün kılar. Bu amaçla, MailQueryBuilder sınıfı ve özellikleri. Aşağıdaki kod örnekleri, belirli kriterlere göre mesajların nasıl getirileceğini gösterecek.
Bugünün Tarihine Göre E-postaları Filtrele
Teslim tarihine göre mesajları almak için, ‘internal_date’ özelliğini kullanın MailQueryBuilder aşağıdaki kod örneğinde gösterildiği gibi sınıf:
import aspose.email as ae
from datetime import datetime
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())
Tarih Aralığına Göre E-postaları Filtrele
Tarih aralığında mesaj getirmek için, aşağıdaki kod örneğinde gösterildiği gibi aynı ‘internal_date’ özelliğini kullanarak tarih aralığını belirtin:
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
# Emails that arrived in last 7 days
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
Belirli Gönderene Göre E-postaları Filtrele
Belirli bir gönderenin mesajlarını getirmek için, ‘from_address’ özelliğini kullanın MailQueryBuilder aşağıdaki kod örneğinde gösterildiği gibi sınıf:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")
Belirli Alana Göre E-postaları Filtrele
Belirli bir alan adından mesaj getirmek için, aşağıdaki kod örneğinde gösterildiği gibi ‘from_address’ özelliğini kullanın:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")
Belirli Alıcıya Göre E-postaları Filtrele
Belirli bir alıcıya mesaj getirmek için, aşağıdaki kod örneğinde gösterildiği gibi ’to’ özelliğini kullanın:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")
İç Tarihe Göre Mesajları Filtrele
"internal date" ve "subject contains" gibi belirli koşullara dayalı bir sorgu oluşturun. "internal date", bir e-posta mesajının alındığı veya e-posta sunucusuna eklendiği tarih ve zamanı ifade eder ve ‘internal_date’ özelliği kullanılarak ayarlanabilir ImapQueryBuilder sınıf. Aşağıdaki kod örneği, konu ve tarih kriterlerine göre gelen kutusundan belirli e-postaları nasıl getireceğinizi gösterir:
import aspose.email as ae
from datetime import datetime
client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd")
client.select_folder("Inbox")
# Set conditions, Subject contains "Newsletter", Emails that arrived today
builder = ae.clients.imap.ImapQueryBuilder()
builder.subject.contains("Newsletter")
builder.internal_date.on(datetime.now())
# Build the query and Get list of messages
query = builder.get_query()
messages = client.list_messages(query)
for info in messages:
print(f"Internal Date: {info.internal_date}")
Özel Anahtar Kelime Bayraklarıyla Mesajları Filtrele
IMAP posta kutusunda özel anahtar kelime bayrakları (özellikle "custom1" ve "custom2") içeren e-postaları aramak için bir sorgu oluşturun. Sorgu oluşturmak için şunu kullanın ImapQueryBuilder IMAP sunucusundan e-posta alırken filtreleyen sınıf.
Başlamak için, sorgu oluşturucusunun bir örneğini oluşturun. Şunu kullanarak has_flags yöntem, yalnızca belirtilen IMAP anahtar kelime bayraklarını taşıyan e-postaları dahil etmek için koşullar ekler. IMAP’teki özel anahtar kelimeler, kullanıcı tanımlı bayraklar olarak da adlandırılır ve kullanıcıların e-postaları çeşitli amaçlarla etiketlemesine veya sınıflandırmasına, örneğin durumlarını işaretlemesine olanak tanır.
Aşağıdaki kod parçacığı, özel anahtar kelime bayraklarına göre e-postaları getirmek için bir sorgu oluşturmayı gösterir:
builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))
Karmaşık Sorgular Oluşturma
Bazen birden fazla sorguyu karşılamak gerekir. Aspose.Email, sorguları birkaç ifadede birleştirerek bunu mümkün kılar. Bir MailQueryBuilder nesneyi ve özelliklerini kullanarak belirli sorgular oluşturun.
Sorguları AND ile Birleştirme
Aşağıdaki kod snippet’i, sorguları AND ile nasıl birleştireceğinizi gösterir.
import aspose.email as ae
from datetime import datetime, timedelta
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.before(datetime.now())
builder.internal_date.since(datetime.today() - timedelta(days=7))
builder.from_address.contains("SpecificHost.com")
Sorguları OR ile Birleştirme
Aşağıdaki kod snippet’i, sorguları OR (VEYA) operatörüyle nasıl birleştireceğinizi gösterir.
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
Harf Duyarlı Filtrelerin Uygulanması
API ayrıca, posta kutusundaki e-postaları büyük‑küçük harf duyarlı bir kritere göre filtreleme yeteneği sunar. Aşağıdaki metodlar, StringComparisonField sınıfı, büyük‑küçük harf duyarlı bayrakları belirterek e-postaları arama yeteneği sağlar.
- StringComparisonField.contains(value, ignore_case)
- StringComparisonField.equals(value, ignore_case)
- StringComparisonField.not_contains(value, ignore_case)
- StringComparisonField.not_equals(value, ignore_case)
Aşağıdaki kod snippet’i, bu yeteneği projenize nasıl uygulayacağınızı gösterir:
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)
Özel Arama Sorguları Gerçekleştir
Ekli e-postaları filtreleyen özel bir Gmail arama ölçütüne göre IMAP posta kutusu için bir arama sorgusu oluşturun — özellikle ekleri olan e-postalar.
Şunun bir örneğini oluşturarak başlayın ImapQueryBuilder, bu da karmaşık IMAP arama sorguları oluşturmayı sağlar. Şunu kullanın custom_search sorgu oluşturucuya Gmail’e özgü bir arama dizesi eklemek için yöntem.
X-GM-RAW "has:attachment" arama dizesi, Gmail’in genişletilmiş IMAP özelliği X-GM-RAW’ı kullanan, IMAP sorgularında Gmail’in güçlü webmail arama sözdizimini kullanmayı sağlayan bir yöntemdir. Burada, has:attachment operatörü ek içeren tüm e-postaları döndürür.
Aşağıdaki kod parçacığı, ekli tüm mesajları almak için e-postaları nasıl filtreleyeceğinizi gösterir:
builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")
mailQuery = builder.get_query()
Bu yöntem, hedeflenen e-postaları getirmek için gelişmiş Gmail’e özgü filtrelemeyi etkinleştirir.