Sök och filtrera IMAP-e-post i Python

För att hämta alla meddelanden från en brevlåda tillhandahåller Aspose.Email metoden ’list_messages’ för ImapClient klass. För att hämta endast de meddelanden som uppfyller specifika villkor kan du använda den överlagrade ’list_messages’-metoden som accepterar en MailQuery som argument. MailQuery klass erbjuder olika egenskaper för att definiera dessa villkor, såsom datum, ämne, avsändare och mottagare.

Det första kodexemplet visar hur man filtrerar meddelanden baserat på både datum och ämne. Ytterligare exempel visar filtrering efter andra kriterier och konstruktion av mer komplexa frågor. Dessutom stödjer API:et skiftlägeskänsliga sökkriterier för exakt filtrering och låter dig ange kodningen för söksträngen när du filtrerar meddelanden från brevlådan.

Filtrera och hämta meddelanden från IMAP-server

Bygg en enkel IMAP-fråga

Använd följande kodsnutt för att ansluta till en IMAP‑brevlåda och hämta meddelanden som kom idag och har ordet "newsletter" i ämnet.

  1. Anslut till IMAP‑servern med port 993 med användarnamn och lösenord.
  2. Välj mappen "Inbox" för att arbeta med inkommande e‑post.
  3. Skapa en instans av ImapQueryBuilder för att konstruera en sökfråga.
  4. Specificera sökkriterier, till exempel att e‑postens ämne ska innehålla "Newsletter" och att intern datum ska matcha dagens datum.
  5. Generera sökfrågan genom att hämta den från byggaren.
  6. Använd frågan för att lista meddelanden som uppfyller kriterierna.
  7. Skriv ut det totala antalet meddelanden som matchar sökkriterierna.

Bygg komplexa sökkriterier

Aspose.Email gör det också möjligt att skapa komplexa sökkriterier för att fråga och filtrera e‑postmeddelanden, t.ex. leveransdatum, inom ett intervall, specifik avsändare, specifik domän eller specifik mottagare. Använd för detta MailQueryBuilder klass och dess egenskaper. Kodexemplen nedan visar hur du hämtar meddelanden efter specifika kriterier.

Filtrera e-post efter dagens datum

För att hämta meddelanden efter leveransdatum, använd egenskapen ‘internal_date’ i MailQueryBuilder klass som visas i kodexemplet nedan:

import aspose.email as ae
from datetime import datetime

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

Filtrera e-post efter datumintervall

För att hämta meddelanden inom ett datumintervall, använd samma ‘internal_date’-egenskap och specificera datumintervallet som visas i kodexemplet nedan:

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

Filtrera e-post efter specifik avsändare

För att hämta meddelanden från en specifik avsändare, använd egenskapen ‘from_address’ för MailQueryBuilder klass som visas i kodexemplet nedan:

import aspose.email as ae

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

Filtrera e‑post efter specifik domän

För att hämta meddelanden från en specifik domän, använd ‘from_address’-egenskapen som visas i kodexemplet nedan:

import aspose.email as ae

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

Filtrera e‑post efter specifik mottagare

För att hämta meddelanden till en specifik mottagare, använd ’to’-egenskapen som visas i kodexemplet nedan:

import aspose.email as ae

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

Filtrera meddelanden efter internt datum

Bygg en fråga på de specificerade villkoren såsom "internal date" och "subject contains". "Internal date" avser datum och tid när ett e‑postmeddelande mottogs eller lades till e‑postservern och kan ställas in med egenskapen ‘internal_date’ för ImapQueryBuilder klass. Kodexemplet nedan visar hur man hämtar specifika e‑postmeddelanden från en inkorg baserat på ämne och datumkriterier:

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

Filtrera meddelanden efter anpassade nyckelordsflaggor

Skapa en fråga för att söka i en IMAP‑brevlåda efter e‑post som innehåller anpassade nyckelordsflaggor, specifikt "custom1" och "custom2". För att konstruera en fråga, använd ImapQueryBuilder klass som filtrerar e‑post vid hämtning från en IMAP‑server.

Börja med att skapa en instans av frågebyggaren. Använd has_flags metod, lägg till villkor för att inkludera endast de e‑postmeddelanden som har de specificerade IMAP‑nyckelordsflaggorna. Anpassade nyckelord i IMAP, även kallade användardefinierade flaggor, låter användare märka eller kategorisera e‑post för olika ändamål, såsom att markera deras status.

Följande kodsnutt illustrerar hur man skapar en fråga för att hämta e‑post baserat på anpassade nyckelordsflaggor:


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

Bygga komplexa frågor

Ibland är det nödvändigt att uppfylla mer än en fråga. Aspose.Email möjliggör detta genom att kombinera frågor i flera satser. Skapa en MailQueryBuilder objektet och använder dess egenskaper för att bygga specifika frågor.

Kombinera frågor med AND

Följande kodsnutt visar hur man kombinerar frågor med 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")

Kombinera frågor med OR

Följande kodsnutt visar hur du kombinerar frågor med OR.


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

Användning av skiftlägeskänsliga filter

API:et ger också möjligheten att filtrera e‑post från brevlådan baserat på skiftlägeskänsliga kriterier. Följande metoder i StringComparisonField klass ger möjlighet att söka e‑post med angivna skiftlägesflaggor.

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

Följande kodsnutt visar hur du implementerar denna funktion i ditt projekt:


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

Utför anpassade sökfrågor

Skapa en sökfråga för en IMAP‑brevlåda som filtrerar e‑post baserat på ett anpassat Gmail‑sökvillkor — specifikt e‑post som har bilagor.

Börja med att skapa en instans av ImapQueryBuilder, vilket hjälper till att bygga komplexa IMAP‑sökfrågor. Använd custom_search metod för att lägga till en Gmail‑specifik söksträng till frågebyggaren.

Söksträngen X-GM-RAW "has:attachment" utnyttjar Gmails utökade IMAP-attribut X-GM-RAW, vilket möjliggör användning av Gmails kraftfulla webbmail-söksyntax i IMAP‑frågor. Här returnerar has:attachment-operatorn alla e‑postmeddelanden som innehåller bilagor.

Följande kodsnutt visar hur man filtrerar e‑post för att få alla meddelanden med bilagor:


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

mailQuery = builder.get_query()

Denna metod möjliggör avancerad Gmail‑specifik filtrering för att hämta målmeddelanden.