Rechercher et filtrer les e‑mails IMAP en Python
Pour récupérer tous les messages d’une boîte aux lettres, Aspose.Email fournit la méthode ’list_messages’ du ImapClient classe. Pour récupérer uniquement les messages qui répondent à des conditions spécifiques, vous pouvez utiliser la méthode surchargée ’list_messages’ qui accepte un MailQuery comme argument. Le MailQuery classe offre diverses propriétés pour définir ces conditions, comme la date, l’objet, l’expéditeur et le destinataire.
Le premier exemple de code montre comment filtrer les messages en fonction à la fois de la date et de l’objet. Des exemples supplémentaires illustrent le filtrage selon d’autres critères et la construction de requêtes plus complexes. De plus, l’API prend en charge les critères de recherche sensibles à la casse pour un filtrage précis et vous permet de spécifier l’encodage de la chaîne de recherche lors du filtrage des messages de la boîte aux lettres.
Filtrer et récupérer les messages du serveur IMAP
Construire une requête IMAP simple
Utilisez l’extrait de code suivant pour vous connecter à une boîte aux lettres IMAP et récupérer les messages arrivés aujourd’hui et contenant le mot "newsletter" dans l’objet.
- Connectez-vous au serveur IMAP en utilisant le port 993 avec le nom d’utilisateur et le mot de passe.
- Sélectionnez le dossier "Inbox" pour travailler avec les e‑mails entrants.
- Créez une instance de ImapQueryBuilder pour construire une requête de recherche.
- Spécifiez les critères de recherche, par exemple que l’objet des e‑mails contienne "Newsletter" et que la date interne corresponde à la date du jour.
- Générez la requête de recherche en la récupérant depuis le constructeur.
- Utilisez la requête pour répertorier les messages qui répondent aux critères.
- Afficher le nombre total de messages correspondant aux critères de recherche.
Construire des critères de recherche complexes
Aspose.Email permet également de créer des critères de recherche complexes pour interroger et filtrer les messages électroniques, tels que la date de réception, une fourchette, un expéditeur spécifique, un domaine spécifique ou un destinataire spécifique. À cet effet, utilisez le MailQueryBuilder classe et ses propriétés. Les exemples de code ci‑dessous vous montreront comment récupérer les messages selon des critères spécifiques.
Filtrer les e‑mails par la date d’aujourd’hui
Pour récupérer les messages par date de réception, utilisez la propriété ‘internal_date’ de MailQueryBuilder classe comme montré dans l’exemple de code ci‑dessous :
import aspose.email as ae
from datetime import datetime
builder = ae.tools.search.MailQueryBuilder()
builder.internal_date.on(datetime.now())
Filtrer les e‑mails par plage de dates
Pour récupérer les messages dans une plage de dates, utilisez la même propriété ‘internal_date’ en spécifiant la plage de dates comme indiqué dans l’exemple de code ci‑dessus :
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))
Filtrer les e‑mails par expéditeur spécifique
Pour récupérer les messages d’un expéditeur spécifique, utilisez la propriété ‘from_address’ du MailQueryBuilder classe comme montré dans l’exemple de code ci‑dessous :
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("saqib.razzaq@127.0.0.1")
Filtrer les e‑mails par domaine spécifique
Pour récupérer les messages d’un domaine spécifique, utilisez la propriété ‘from_address’ comme indiqué dans l’exemple de code ci‑dessous :
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("SpecificHost.com")
Filtrer les e‑mails par destinataire spécifique
Pour récupérer les messages à destination d’un destinataire spécifique, utilisez la propriété ’to’ comme indiqué dans l’exemple de code ci‑dessus :
import aspose.email as ae
builder = ae.tools.search.MailQueryBuilder()
builder.to.contains("recipient")
Filtrer les messages par date interne
Construisez une requête sur les conditions spécifiées telles que "date interne" et "objet contient". La "date interne" fait référence à la date et l’heure auxquelles un e‑mail a été reçu ou ajouté au serveur de messagerie et peut être définie à l’aide de la propriété ‘internal_date’ du ImapQueryBuilder classe. L’exemple de code ci‑dessus montre comment récupérer des e‑mails spécifiques d’une boîte de réception en fonction de critères d’objet et de date :
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}")
Filtrer les messages par indicateurs de mots‑clé personnalisés
Créez une requête pour rechercher dans une boîte aux lettres IMAP des e‑mails contenant des indicateurs de mots‑clé personnalisés, spécifiquement "custom1" et "custom2". Pour construire la requête, utilisez le ImapQueryBuilder classe qui filtre les e‑mails lors de leur récupération depuis un serveur IMAP.
Pour commencer, créez une instance du constructeur de requête. En utilisant le has_flags méthode, ajoutez des conditions pour inclure uniquement les e‑mails portant les indicateurs de mots‑clé IMAP spécifiés. Les mots‑clé personnalisés dans IMAP, également appelés indicateurs définis par l’utilisateur, permettent aux utilisateurs d’étiqueter ou de catégoriser les e‑mails à diverses fins, comme marquer leur statut.
L’extrait de code suivant illustre comment créer une requête pour récupérer des e‑mails basés sur des indicateurs de mots‑clé personnalisés :
builder = ae.clients.imap.ImapQueryBuilder()
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom1"))
builder.has_flags(ae.clients.imap.ImapMessageFlags.keyword("custom2"))
Construire des requêtes complexes
Parfois il est nécessaire de satisfaire plus d’une requête. Aspose.Email rend cela possible en combinant les requêtes dans plusieurs instructions. Créez un MailQueryBuilder objet et utilisez ses propriétés pour construire des requêtes spécifiques.
Combiner des requêtes avec AND
Le snippet de code suivant montre comment combiner des requêtes avec 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")
Combiner des requêtes avec OR
Le fragment de code suivant vous montre comment combiner des requêtes avec OR.
builder.either(builder.subject.contains("test"), builder.from_address.contains("noreply@host.com"))
Application de filtres sensibles à la casse
L’API fournit également la capacité de filtrer les e‑mails de la boîte aux lettres selon un critère sensible à la casse. Les méthodes suivantes du StringComparisonField classe offre la capacité de rechercher des e‑mails en spécifiant des drapeaux sensibles à la casse.
- StringComparisonField.contains(value, ignore_case)
- StringComparisonField.equals(value, ignore_case)
- StringComparisonField.not_contains(value, ignore_case)
- StringComparisonField.not_equals(value, ignore_case)
Le fragment de code suivant vous montre comment implémenter cette capacité dans votre projet :
builder = ae.tools.search.MailQueryBuilder()
builder.from_address.contains("noreply@host.com", True)
Exécuter des requêtes de recherche personnalisées
Créez une requête de recherche pour une boîte aux lettres IMAP qui filtre les e‑mails selon un critère de recherche Gmail personnalisé — spécifiquement, les e‑mails qui ont des pièces jointes.
Commencez par créer une instance de ImapQueryBuilder, qui aide à construire des requêtes de recherche IMAP complexes. Utilisez le custom_search méthode pour ajouter une chaîne de recherche spécifique à Gmail au constructeur de requête.
La chaîne de recherche X-GM-RAW "has:attachment" exploite l’attribut IMAP étendu de Gmail X-GM-RAW, permettant d’utiliser la puissante syntaxe de recherche webmail de Gmail dans les requêtes IMAP. Ici, l’opérateur has:attachment renvoie tous les e‑mails contenant des pièces jointes.
L’extrait de code suivant montre comment filtrer les e‑mails pour obtenir tous les messages avec pièces jointes :
builder = ae.clients.imap.ImapQueryBuilder()
builder.custom_search("X-GM-RAW \"has:attachment\"")
mailQuery = builder.get_query()
Cette méthode permet un filtrage avancé spécifique à Gmail pour récupérer des e‑mails ciblés.