Wyszukiwanie i filtrowanie e‑maili IMAP w Pythonie

Aby pobrać wszystkie wiadomości ze skrzynki, Aspose.Email udostępnia metodę ’list_messages’ klasy ImapClient klasa. Aby pobrać tylko wiadomości spełniające określone warunki, można użyć przeciążonej metody ’list_messages’, która przyjmuje MailQuery jako argument. MailQuery klasa udostępnia różne właściwości definiujące te warunki, takie jak data, temat, nadawca i odbiorca.

Pierwszy przykład kodu demonstruje, jak filtrować wiadomości na podstawie zarówno daty, jak i tematu. Dodatkowe przykłady pokazują filtrowanie według innych kryteriów oraz budowanie bardziej złożonych zapytań. Ponadto API obsługuje kryteria wyszukiwania rozróżniające wielkość liter dla precyzyjnego filtrowania i pozwala określić kodowanie ciągu wyszukiwania przy filtrowaniu wiadomości ze skrzynki.

Filtrowanie i pobieranie wiadomości z serwera IMAP

Tworzenie prostego zapytania IMAP

Użyj poniższego fragmentu kodu, aby połączyć się z skrzynką IMAP i pobrać wiadomości, które nadeszły dziś oraz mają w temacie słowo "newsletter".

  1. Połącz się z serwerem IMAP używając portu 993 oraz nazwy użytkownika i hasła.
  2. Wybierz folder "Inbox", aby pracować z przychodzącymi e‑mailami.
  3. Utwórz instancję ImapQueryBuilder do zbudowania zapytania wyszukiwania.
  4. Określ kryteria wyszukiwania, na przykład, że temat e‑maili powinien zawierać "Newsletter" i że data wewnętrzna powinna odpowiadać dzisiejszej dacie.
  5. Utwórz zapytanie wyszukiwania, pobierając je z budowniczego.
  6. Użyj zapytania, aby wyświetlić wiadomości spełniające kryteria.
  7. Wypisz łączną liczbę wiadomości spełniających kryteria wyszukiwania.

Tworzenie złożonych kryteriów wyszukiwania

Aspose.Email umożliwia także tworzenie złożonych kryteriów wyszukiwania do zapytań i filtrowania wiadomości e‑mail, takich jak data dostarczenia, zakres, konkretny nadawca, konkretna domena lub konkretny odbiorca. W tym celu użyj MailQueryBuilder klasy i jej właściwości. Poniższe przykłady kodu pokażą, jak pobrać wiadomości według określonych kryteriów.

Filtruj e-maile według dzisiejszej daty

Aby pobrać wiadomości według daty dostarczenia, użyj właściwości ‘internal_date’ klasy MailQueryBuilder klasy, jak pokazano w poniższym przykładzie kodu:

import aspose.email as ae
from datetime import datetime

builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())

Filtrowanie e‑maili według przedziału dat

Aby pobrać wiadomości w określonym przedziale dat, użyj tej samej właściwości ‘internal_date’, określając zakres dat jak pokazano w poniższym przykładzie kodu:

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))

Filtruj e-maile według konkretnego nadawcy

Aby pobrać wiadomości od określonego nadawcy, użyj właściwości ‘from_address’ klasy MailQueryBuilder klasy, jak pokazano w poniższym przykładzie kodu:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")

Filtrowanie e‑maili według konkretnej domeny

Aby pobrać wiadomości z określonej domeny, użyj właściwości ‘from_address’ jak pokazano w poniższym przykładzie kodu:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")

Filtrowanie e‑maili według konkretnego odbiorcy

Aby pobrać wiadomości do określonego odbiorcy, użyj właściwości ’to’ jak pokazano w poniższym przykładzie kodu:

import aspose.email as ae

builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")

Filtrowanie wiadomości według daty wewnętrznej

Utwórz zapytanie na podstawie określonych warunków, takich jak "internal date" i "subject contains". "Internal date" odnosi się do daty i godziny, kiedy wiadomość e‑mail została odebrana lub dodana do serwera pocztowego i może być ustawiona przy użyciu właściwości ‘internal_date’ klasy ImapQueryBuilder klasa. Poniższy przykład kodu demonstruje, jak pobrać konkretne e‑maile z folderu odbiorczego na podstawie kryteriów tematu i daty:

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}")

Filtrowanie wiadomości według niestandardowych flag słów kluczowych

Utwórz zapytanie do przeszukania skrzynki IMAP w poszukiwaniu e‑maili zawierających niestandardowe flagi słów kluczowych, konkretnie "custom1" i "custom2". Aby zbudować zapytanie, użyj ImapQueryBuilder klasa, która filtruje e‑maile przy ich pobieraniu z serwera IMAP.

Aby rozpocząć, utwórz instancję budowniczego zapytań. Używając has_flags metoda, dodaj warunki, aby uwzględnić tylko te e‑maile, które posiadają określone flagi słów kluczowych IMAP. Niestandardowe słowa kluczowe w IMAP, zwane także flagami definiowanymi przez użytkownika, pozwalają na oznaczanie lub kategoryzowanie e‑maili w różnych celach, na przykład oznaczanie ich statusu.

Poniższy fragment kodu ilustruje, jak utworzyć zapytanie w celu pobrania e‑maili na podstawie niestandardowych flag słów kluczowych:


builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))

Budowanie złożonych zapytań

Czasami konieczne jest spełnienie więcej niż jednego zapytania. Aspose.Email umożliwia to, łącząc zapytania w kilku wyrażeniach. Utwórz MailQueryBuilder obiekt i używać jego właściwości do budowania konkretnych zapytań.

Łączenie zapytań przy użyciu AND

Poniższy fragment kodu pokazuje, jak łączyć zapytania przy użyciu 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")

Łączenie zapytań przy użyciu OR

Poniższy fragment kodu pokazuje, jak łączyć zapytania za pomocą OR.


builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))

Stosowanie filtrów wrażliwych na wielkość liter

API również zapewnia możliwość filtrowania e‑maili ze skrzynki na podstawie kryteriów rozróżniających wielkość liter. Następujące metody klasy StringComparisonField klasa zapewnia możliwość wyszukiwania e‑maili z określeniem flag rozróżniających wielkość liter.

  • StringComparisonField.contains(value, ignore_case)
  • StringComparisonField.equals(value, ignore_case)
  • StringComparisonField.not_contains(value, ignore_case)
  • StringComparisonField.not_equals(value, ignore_case)

Poniższy fragment kodu pokazuje, jak wdrożyć tę funkcjonalność w swoim projekcie:


builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)

Wykonywanie niestandardowych zapytań wyszukiwania

Utwórz zapytanie wyszukiwania dla skrzynki IMAP, które filtruje e‑maile na podstawie niestandardowego kryterium Gmail — konkretnie e‑maile posiadające załączniki.

Zacznij od utworzenia instancji ImapQueryBuilder, co pomaga budować złożone zapytania wyszukiwania IMAP. Użyj custom_search metoda dodająca Gmail‑specyficzny ciąg wyszukiwania do budowniczego zapytań.

Ciąg wyszukiwania X-GM-RAW "has:attachment" wykorzystuje rozszerzony atrybut IMAP Gmaila X-GM-RAW, umożliwiając użycie potężnej składni wyszukiwania Gmail w zapytaniach IMAP. Operator has:attachment zwraca wszystkie e‑maile zawierające załączniki.

Poniższy fragment kodu demonstruje, jak filtrować e‑maile, aby uzyskać wszystkie wiadomości z załącznikami:


builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")

mailQuery = builder.get_query()

Ta metoda umożliwia zaawansowane filtrowanie specyficzne dla Gmaila w celu pobrania wybranych e‑maili.