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".

  1. Připojte se k serveru IMAP pomocí portu 993 s uživatelským jménem a heslem.
  2. Vyberte složku "Inbox" pro práci s příchozími e‑maily.
  3. Vytvořte instanci ImapQueryBuilder k vytvoření vyhledávacího dotazu.
  4. 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.
  5. Vygenerujte vyhledávací dotaz načtením z tvůrce.
  6. Použijte dotaz k vypsání zpráv, které splňují kritéria.
  7. 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ů.