Vyhledávat a filtrovat IMAP e‑maily v Pythonu
Pro získání všech zpráv z poštovní schránky Aspose.Email poskytuje metodu ’list_messages’ třídy ImapClient třída. Pro získání pouze zpráv, které splňují konkrétní podmínky, můžete použít přetíženou metodu ’list_messages’, která přijímá MailQuery jako argument. MailQuery třída nabízí různé vlastnosti pro definování těchto podmínek, jako jsou datum, předmět, odesílatel a příjemce.
První ukázka kódu demonstruje, jak filtrovat zprávy podle data i předmětu. Další příklady ukazují filtrování podle jiných kritérií a vytváření složitějších dotazů. Navíc API podporuje rozlišování velikosti písmen u kritérií vyhledávání pro přesné filtrování a umožňuje zadat kódování vyhledávacího řetězce při filtrování zpráv z poštovní schránky.
Filtrovat a získat zprávy ze serveru IMAP
Vytvořit jednoduchý IMAP dotaz
Použijte následující úryvek kódu k připojení k IMAP poštovní schránce a získání zpráv, které dorazily dnes a mají ve předmětu slovo "newsletter".
- Připojte se k serveru IMAP pomocí portu 993 s uživatelským jménem a heslem.
- Vyberte složku "Inbox" pro práci s příchozími e‑maily.
- Vytvořte instanci ImapQueryBuilder k vytvoření vyhledávacího dotazu.
- Zadejte kritéria vyhledávání, například že předmět e‑mailů má obsahovat "Newsletter" a interní datum má odpovídat dnešnímu datu.
- Vygenerujte vyhledávací dotaz načtením z tvůrce.
- Použijte dotaz k vypsání zpráv, které splňují kritéria.
- Vytiskněte celkový počet zpráv, které splňují kritéria vyhledávání.
Vytvořit složitá kritéria vyhledávání
Aspose.Email také umožňuje vytvořit složitá kritéria vyhledávání pro dotazování a filtrování e‑mailových zpráv, jako je datum doručení, v rozmezí, konkrétní odesílatel, konkrétní doména nebo konkrétní příjemce. K tomuto účelu použijte MailQueryBuilder třídy a jejích vlastností. Níže uvedené ukázky kódu vám ukážou, jak načíst zprávy podle konkrétních kritérií.
Filtrovat e‑maily podle dnešního data
Pro načtení zpráv podle data doručení použijte vlastnost ‘internal_date’ třídy MailQueryBuilder třída, jak je ukázáno v níže uvedeném příkladu kódu:
import aspose.email as ae
from datetime import datetime
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())
Filtrovat e‑maily podle časového rozmezí
Pro načtení zpráv v rámci časového intervalu použijte stejnou vlastnost ‘internal_date’ s určením rozsahu dat podle ukázky kódu níže:
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))
Filtrovat e‑maily podle konkrétního odesílatele
Pro získání zpráv od konkrétního odesílatele použijte vlastnost ‘from_address’ třídy MailQueryBuilder třída, jak je ukázáno v níže uvedeném příkladu kódu:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")
Filtrovat e‑maily podle konkrétní domény
Pro načtení zpráv z konkrétní domény použijte vlastnost ‘from_address’ podle ukázky kódu níže:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")
Filtrovat e‑maily podle konkrétního příjemce
Pro načtení zpráv pro konkrétního příjemce použijte vlastnost ’to’ podle ukázky kódu níže:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")
Filtrovat zprávy podle interního data
Sestavte dotaz na základě specifikovaných podmínek, jako jsou "interní datum" a "předmět obsahuje". "Interní datum" označuje datum a čas, kdy byla e‑mailová zpráva přijata nebo přidána na e‑mailový server a lze jej nastavit pomocí vlastnosti ‘internal_date’ třídy ImapQueryBuilder třída. Níže uvedený ukázkový kód demonstruje, jak získat konkrétní e‑maily z doručené pošty na základě kritéria předmětu a data:
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}")
Filtrovat zprávy podle vlastních klíčových značek
Vytvořte dotaz pro prohledání IMAP poštovní schránky na e‑maily obsahující vlastní klíčové značky, konkrétně "custom1" a "custom2". Pro konstrukci dotazu použijte ImapQueryBuilder třída, která filtruje e‑maily při jejich získávání ze serveru IMAP.
Nejprve vytvořte instanci tvůrce dotazů. Použitím has_flags metoda, přidejte podmínky, aby zahrnovala pouze e‑maily s uvedenými IMAP klíčovými značkami. Vlastní klíčová slova v IMAP, také nazývaná uživatelem definované značky, umožňují uživatelům označovat nebo kategorizovat e‑maily pro různé účely, například pro označení jejich stavu.
Následující úryvek kódu ukazuje, jak vytvořit dotaz pro získání e‑mailů na základě vlastních klíčových značek:
builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))
Vytváření složitých dotazů
Někdy je nutné splnit více než jeden dotaz. Aspose.Email to umožňuje kombinací dotazů v několika výrazech. Vytvořte MailQueryBuilder objekt a použít jeho vlastnosti k vytvoření konkrétních dotazů.
Kombinování dotazů pomocí AND
Následující úryvek kódu ukazuje, jak kombinovat dotazy pomocí AND.
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")
Kombinování dotazů pomocí OR
Následující úryvek kódu ukazuje, jak kombinovat dotazy pomocí OR.
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
Použití filtrů rozlišujících velikost písmen
API také poskytuje možnost filtrovat e‑maily z poštovní schránky na základě kritéria rozlišujícího velikost písmen. Následující metody StringComparisonField třída poskytuje možnost vyhledávat e‑maily s určením rozlišování velikosti písmen.
- StringComparisonField.contains(value, ignore_case)
- StringComparisonField.equals(value, ignore_case)
- StringComparisonField.not_contains(value, ignore_case)
- StringComparisonField.not_equals(value, ignore_case)
Následující úryvek kódu ukazuje, jak implementovat tuto schopnost do vašeho projektu:
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)
Provádět vlastní vyhledávací dotazy
Vytvořte vyhledávací dotaz pro IMAP poštovní schránku, který filtruje e‑maily podle vlastního Gmail kritéria – konkrétně e‑maily s přílohami.
Začněte vytvořením instance ImapQueryBuilder, což pomáhá vytvářet složité IMAP vyhledávací dotazy. Použijte custom_search metoda pro přidání Gmail‑specifického vyhledávacího řetězce do tvůrce dotazů.
Vyhledávací řetězec X-GM-RAW "has:attachment" využívá rozšířený IMAP atribut Gmailu X-GM-RAW, což umožňuje použít výkonnou webovou syntaxi vyhledávání Gmailu v IMAP dotazech. Operátor has:attachment vrací všechny e‑maily obsahující přílohy.
Níže uvedený úryvek ukazuje, jak filtrovat e‑maily a získat všechny zprávy s přílohami:
builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")
mailQuery = builder.get_query()
Tato metoda umožňuje pokročilé filtrování specifické pro Gmail pro získání cílených e‑mailů.