Zoeken en filteren van IMAP‑e‑mails in Python
Om alle berichten uit een mailbox op te halen biedt Aspose.Email de ’list_messages’-methode van de ImapClient klasse. Om alleen die berichten op te halen die aan specifieke voorwaarden voldoen, kun je de overladen ’list_messages’-methode gebruiken die een MailQuery als argument. De MailQuery klasse biedt diverse eigenschappen om deze voorwaarden te definiëren, zoals datum, onderwerp, afzender en ontvanger.
Het eerste code‑voorbeeld laat zien hoe je berichten filtert op zowel datum als onderwerp. Verdere voorbeelden tonen filteren op andere criteria en het opbouwen van complexere queries. Bovendien ondersteunt de API hoofdlettergevoelige zoekcriteria voor nauwkeurige filtering en kun je de codering van de zoekreeks opgeven bij het filteren van berichten uit de mailbox.
Berichten filteren en ophalen van IMAP‑server
Eenvoudige IMAP‑query bouwen
Gebruik het volgende code‑fragment om verbinding te maken met een IMAP‑mailbox en berichten op te halen die vandaag zijn binnengekomen en het woord "newsletter" in het onderwerp hebben.
- Maak verbinding met de IMAP‑server via poort 993 met de gebruikersnaam en het wachtwoord.
- Selecteer de "Inbox"‑map om met binnenkomende e‑mails te werken.
- Maak een instantie van ImapQueryBuilder om een zoekquery op te bouwen.
- Specificeer zoekcriteria, bijvoorbeeld dat het onderwerp van e‑mails "Newsletter" moet bevatten en dat de interne datum overeenkomt met de datum van vandaag.
- Genereer de zoekquery door deze uit de builder op te halen.
- Gebruik de query om berichten te tonen die aan de criteria voldoen.
- Print het totale aantal berichten dat aan de zoekcriteria voldoet.
Complexe zoekcriteria opbouwen
Aspose.Email maakt het ook mogelijk om complexe zoekcriteria te bouwen voor het doorzoeken en filteren van e-mailberichten, zoals leveringsdatum, binnen een bereik, specifieke afzender, specifiek domein of specifieke ontvanger. Gebruik hiervoor de MailQueryBuilder klasse en zijn eigenschappen. De onderstaande codevoorbeelden laten zien hoe je berichten kunt ophalen op basis van specifieke criteria.
E-mails filteren op datum van vandaag
Om berichten op een leveringsdatum op te halen, gebruik je de eigenschap ‘internal_date’ van de MailQueryBuilder klasse zoals weergegeven in het code‑voorbeeld hieronder:
import aspose.email as ae
from datetime import datetime
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())
E‑mails filteren op datumbereik
Om berichten binnen een datumbereik op te halen, gebruik je dezelfde ‘internal_date’ eigenschap en specificeer je het datumbereik zoals getoond in het onderstaande codevoorbeeld:
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))
E-mails filteren op specifieke afzender
Om berichten van een specifieke afzender op te halen, gebruik de ‘from_address’-eigenschap van de MailQueryBuilder klasse zoals weergegeven in het code‑voorbeeld hieronder:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")
E‑mails filteren op specifiek domein
Om berichten van een specifiek domein op te halen, gebruik je de ‘from_address’ eigenschap zoals weergegeven in het onderstaande codevoorbeeld:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")
E‑mails filteren op specifieke ontvanger
Om berichten naar een specifieke ontvanger op te halen, gebruik je de ’to’ eigenschap zoals weergegeven in het onderstaande codevoorbeeld:
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")
Berichten filteren op interne datum
Bouw een query op basis van de opgegeven voorwaarden zoals "internal date" en "subject contains". De "internal date" verwijst naar de datum en tijd waarop een e‑mailbericht is ontvangen of toegevoegd aan de e‑mailserver en kan worden ingesteld met de ‘internal_date’-eigenschap van de ImapQueryBuilder klasse. Het onderstaande code‑voorbeeld toont hoe je specifieke e‑mails uit een inbox haalt op basis van onderwerp‑ en datumcriteria:
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}")
Berichten filteren op aangepaste sleutelwoord‑vlaggen
Maak een query om een IMAP‑mailbox te doorzoeken op e‑mails met aangepaste sleutelwoord‑vlaggen, specifiek "custom1" en "custom2". Gebruik de ImapQueryBuilder klasse die e‑mails filtert bij het ophalen van een IMAP‑server.
Begin met het maken van een instantie van de query‑builder. Met behulp van de has_flags methode, voeg voorwaarden toe om alleen die e‑mails op te nemen die de opgegeven IMAP‑sleutelwoord‑vlaggen bevatten. Aangepaste sleutelwoorden in IMAP, ook wel gebruikers‑gedefinieerde vlaggen genoemd, stellen gebruikers in staat e‑mails te labelen of te categoriseren voor diverse doeleinden, zoals het markeren van hun status.
Het onderstaande code‑fragment illustreert hoe je een query maakt om e‑mails op te halen op basis van aangepaste sleutelwoord‑vlaggen:
builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))
Complexe queries bouwen
Soms is het nodig om aan meer dan één query te voldoen. Aspose.Email maakt dit mogelijk door queries te combineren in verschillende statements. Maak een MailQueryBuilder object en zijn eigenschappen gebruiken om specifieke queries op te bouwen.
Queries combineren met AND
Het volgende codefragment toont hoe je queries combineert met 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")
Queries combineren met OR
Het volgende codefragment laat zien hoe je queries combineert met OR.
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
Hoofdlettergevoelige filters toepassen
De API biedt ook de mogelijkheid om e‑mails uit de mailbox te filteren op basis van een hoofdlettergevoelige criteria. De volgende methoden van de StringComparisonField klasse biedt de mogelijkheid om e-mails te zoeken met hoofdlettergevoelige vlaggen.
- StringComparisonField.contains(value, ignore_case)
- StringComparisonField.equals(value, ignore_case)
- StringComparisonField.not_contains(value, ignore_case)
- StringComparisonField.not_equals(value, ignore_case)
Het volgende codefragment laat zien hoe je deze functionaliteit in je project implementeert:
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)
Aangepaste zoekqueries uitvoeren
Maak een zoekquery voor een IMAP‑mailbox die e‑mails filtert op een aangepast Gmail‑zoekcriterium — namelijk e‑mails met bijlagen.
Begin met het maken van een instantie van ImapQueryBuilder, die helpt complexe IMAP‑zoekqueries op te bouwen. Gebruik de custom_search methode om een Gmail‑specifieke zoekreeks toe te voegen aan de query‑builder.
De zoekreeks X-GM-RAW "has:attachment" maakt gebruik van het uitgebreide Gmail‑IMAP‑attribuut X-GM-RAW, waardoor de krachtige Gmail‑zoeksyntax binnen IMAP‑queries kan worden gebruikt. Hier retourneert de has:attachment‑operator alle e‑mails met bijlagen.
Het onderstaande code‑fragment toont hoe je e‑mails filtert om alle berichten met bijlagen te verkrijgen:
builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")
mailQuery = builder.get_query()
Deze methode maakt geavanceerde Gmail‑specifieke filtering mogelijk om gerichte e‑mails op te halen.