Cerca e filtra email IMAP in Python

Per recuperare tutti i messaggi da una casella, Aspose.Email fornisce il metodo ’list_messages’ del ImapClient classe. Per recuperare solo i messaggi che soddisfano condizioni specifiche, è possibile utilizzare il metodo sovraccaricato ’list_messages’ che accetta un MailQuery come argomento. Il MailQuery la classe offre varie proprietà per definire queste condizioni, come data, oggetto, mittente e destinatario.

Il primo esempio di codice dimostra come filtrare i messaggi in base sia alla data sia all’oggetto. Esempi aggiuntivi mostrano il filtraggio per altri criteri e la costruzione di query più complesse. Inoltre, l’API supporta criteri di ricerca sensibili al maiuscolo/minuscolo per un filtraggio preciso e permette di specificare la codifica della stringa di ricerca quando si filtrano i messaggi dalla casella di posta.

Filtra e recupera messaggi dal server IMAP

Crea una query IMAP semplice

Usa il seguente frammento di codice per connetterti a una casella IMAP e ottenere i messaggi arrivati oggi e che hanno la parola "newsletter" nell’oggetto.

  1. Connettiti al server IMAP usando la porta 993 con il nome utente e la password.
  2. Seleziona la cartella "Inbox" per lavorare con le email in arrivo.
  3. Crea un’istanza di ImapQueryBuilder per costruire una query di ricerca.
  4. Specifica i criteri di ricerca, ad esempio che l’oggetto delle email contenga "Newsletter" e che la data interna corrisponda alla data odierna.
  5. Genera la query di ricerca recuperandola dal builder.
  6. Usa la query per elencare i messaggi che soddisfano i criteri.
  7. Stampa il numero totale di messaggi che corrispondono ai criteri di ricerca.

Crea criteri di ricerca complessi

Aspose.Email consente anche di creare criteri di ricerca complessi per interrogare e filtrare i messaggi email, come data di consegna, intervallo, mittente specifico, dominio specifico o destinatario specifico. A questo scopo, usa il MailQueryBuilder classe e le sue proprietà. I campioni di codice seguenti ti mostreranno come recuperare i messaggi in base a criteri specifici.

Filtra le email per la data odierna

Per recuperare i messaggi in base a una data di consegna, utilizza la proprietà ‘internal_date’ della MailQueryBuilder classe come mostrato nell’esempio di codice sotto:

import aspose.email as ae
from datetime import datetime

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

Filtra email per intervallo di date

Per recuperare i messaggi entro un intervallo di date, usa la stessa proprietà ‘internal_date’ specificando l’intervallo di date come mostrato nel codice seguente:

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

Filtra le email per mittente specifico

Per recuperare i messaggi da un mittente specifico, usa la proprietà ‘from_address’ del MailQueryBuilder classe come mostrato nell’esempio di codice sotto:

import aspose.email as ae

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

Filtra email per dominio specifico

Per recuperare i messaggi da un dominio specifico, usa la proprietà ‘from_address’ come mostrato nel codice seguente:

import aspose.email as ae

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

Filtra email per destinatario specifico

Per recuperare i messaggi destinati a un destinatario specifico, usa la proprietà ’to’ come mostrato nel codice seguente:

import aspose.email as ae

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

Filtra messaggi per data interna

Costruisci una query sulle condizioni specificate come "data interna" e "oggetto contiene". La "data interna" si riferisce alla data e ora in cui un messaggio email è stato ricevuto o aggiunto al server email e può essere impostata usando la proprietà ‘internal_date’ del ImapQueryBuilder classe. L’esempio di codice qui sotto dimostra come recuperare email specifiche da una inbox basandosi su criteri di oggetto e 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}")

Filtra messaggi per flag di parole chiave personalizzate

Crea una query per cercare in una casella IMAP email contenenti flag di parole chiave personalizzate, in particolare "custom1" e "custom2". Per costruire una query, usa il ImapQueryBuilder classe che filtra le email durante il loro recupero da un server IMAP.

Per iniziare, crea un’istanza del builder di query. Usando il has_flags metodo, aggiungi condizioni per includere solo le email che possiedono i flag di parole chiave IMAP specificati. Le parole chiave personalizzate in IMAP, note anche come flag definiti dall’utente, consentono agli utenti di etichettare o categorizzare le email per vari scopi, come segnare il loro stato.

Il frammento di codice seguente illustra come creare una query per recuperare le email basate su flag di parole chiave personalizzate:


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

Costruire Query Complesse

Talvolta è necessario soddisfare più di una query. Aspose.Email lo rende possibile combinando le query in diverse istruzioni. Crea una MailQueryBuilder oggetto e utilizzare le sue proprietà per costruire query specifiche.

Combinare Query con AND

Il seguente frammento di codice mostra come combinare query con 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")

Combinare Query con OR

Il seguente frammento di codice mostra come combinare le query con OR.


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

Applicazione di filtri case sensitive

L’API fornisce anche la capacità di filtrare le e‑mail dalla casella in base a criteri sensibili al maiuscolo/minuscolo. I seguenti metodi del StringComparisonField La classe fornisce la capacità di cercare e‑mail specificando flag sensibili al maiuscolo/minuscolo.

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

Il seguente frammento di codice mostra come implementare questa funzionalità nel tuo progetto:


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

Esegui query di ricerca personalizzate

Crea una query di ricerca per una casella IMAP che filtri le email in base a un criterio di ricerca Gmail personalizzato — in particolare, email che hanno allegati.

Inizia creando un’istanza di ImapQueryBuilder, che aiuta a creare query di ricerca IMAP complesse. Usa il custom_search metodo per aggiungere una stringa di ricerca specifica di Gmail al builder della query.

La stringa di ricerca X-GM-RAW "has:attachment" sfrutta l’attributo IMAP esteso di Gmail X-GM-RAW, consentendo l’uso della potente sintassi di ricerca webmail di Gmail all’interno delle query IMAP. Qui, l’operatore has:attachment restituisce tutte le email contenenti allegati.

Il frammento di codice seguente dimostra come filtrare le email per ottenere tutti i messaggi con allegati:


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

mailQuery = builder.get_query()

Questo metodo consente un filtraggio avanzato specifico di Gmail per recuperare email mirate.