Récupérer et lister les e‑mails depuis un serveur IMAP

Lister les messages de la boîte aux lettres

La méthode ’list_messages’ de la ImapClient classe récupère une liste de tous les messages du dossier actuellement sélectionné ("Inbox" dans ce cas). Cette liste contient des objets de métadonnées de messages, qui incluent généralement des informations comme les ID de message, les numéros de séquence, les UID et éventuellement des données résumées telles que les lignes d’objet ou les informations d’expéditeur.

Le fragment de code ci‑dessous montre comment récupérer les métadonnées des messages de la boîte de réception et afficher le nombre total de messages qu’elle contient :

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.select_folder("Inbox")

messages = client.list_messages()
print(f"Total Messages: {len(messages)}")

Lister les messages avec prise en charge de la pagination

Dans les scénarios où le serveur de messagerie contient un grand nombre de messages dans la boîte aux lettres, il est souvent souhaitable de lister ou récupérer les messages avec prise en charge de la pagination. Aspose.Email ImapClient classe vous permet de récupérer les messages du serveur avec prise en charge de la pagination.

Lister les messages de façon récursive

Le protocole IMAP permet la récupération récursive des messages d’un dossier de boîte aux lettres. Il rend possible le listage des messages de ses sous‑dossiers également. Le fragment de code ci‑dessous montre comment lister les messages de manière récursive :

Lister les IDs MIME des messages

Le ImapMessageInfo classe offre un moyen pratique d’accéder au MIME MessageId pour identifier les messages sans avoir à extraire le contenu complet du message. Voici un fragment de code qui montre comment lister les MIME MessageId :

Lister les messages avec MultiConnection

Le ImapClient classe propose une propriété use_multi_connection, qui permet l’utilisation de multiples connexions pour des opérations à forte charge. De plus, vous pouvez spécifier le nombre de connexions en mode multi‑connexion à l’aide de la propriété connections_quantity. Le fragment de code suivant illustre comment utiliser le mode multi‑connexion pour lister les messages :

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

client.select_folder("Inbox")
client.connections_quantity = 5
client.use_multi_connection = ae.clients.MultiConnectionMode.ENABLE

message_info_col = client.list_messages(True)

Veuillez noter que l’utilisation de ce mode n’entraîne pas nécessairement une augmentation des performances.

Récupérer les messages par numéro de séquence ou ID unique

L’API Aspose.Email vous permet de générer deux listes de messages, l’une contenant les numéros de séquence et l’autre contenant les IDs uniques de tous les messages de la boîte de réception. Pour récupérer les messages du serveur IMAP par leurs identifiants, utilisez la méthode fetch_messages de la ImapClient classe. Le fragment de code ci‑dessous montre comment lister les messages par identifiants :

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

# List messages
message_info_col = client.list_messages()
print("ListMessages Count:", message_info_col.count)

# Get sequence numbers and unique IDs
sequence_number_ar = [mi.sequence_number for mi in message_info_col]
unique_id_ar = [mi.unique_id for mi in message_info_col]

# Fetch messages by sequence number
fetched_messages_by_snum = client.fetch_messages(sequence_number_ar)
print("FetchMessages-sequenceNumberAr Count:", len(fetched_messages_by_snum))

# Fetch messages by UID
fetched_messages_by_uid = client.fetch_messages(unique_id_ar)
print("FetchMessages-uniqueIdAr Count:", len(fetched_messages_by_uid))

Obtenir les messages en ordre décroissant

La tâche est accomplie en définissant les paramètres de pagination pour la récupération des messages. À cet effet, utilisez la propriété ascending_sorting de la PageSettings classe qui fait partie du module du client IMAP. Définissez l’attribut ascending_sorting sur le PageSettings objet à False. Cela indique que les messages doivent être triés par défaut en ordre décroissant lors de la récupération. Le fragment de code suivant montre comment récupérer les messages en ordre décroissant :

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

page_settings = ae.clients.imap.PageSettings
page_settings.ascending_sorting = False
page_info = client.list_messages_by_page(5, page_settings)
messages = page_info.items

for message in messages:
    print(message.subject)

Récupérer les messages du serveur et les sauvegarder sur le disque

Le ImapClient classe peut récupérer des messages d’un serveur IMAP et les sauvegarder au format EML sur le disque local. Les étapes suivantes sont requises pour enregistrer les messages sur le disque :

  1. Utilisez le ImapClient classe avec les paramètres nécessaires (hôte, port, nom d’utilisateur, mot de passe) pour se connecter au serveur IMAP.
  2. Sélectionnez le dossier désiré en appelant la méthode select_folder (par ex., "Inbox")
  3. Récupérez les messages en les parcourant avec la méthode list_messages.
  4. Pour sauvegarder les messages, pour chaque message, utilisez la méthode save_message en spécifiant le répertoire et en ajoutant l’ID unique au nom du fichier pour garantir l’unicité.

Le fragment de code suivant vous montre comment récupérer les e‑mails d’un serveur et les sauvegarder :

Enregistrer les messages au format MSG

Pour enregistrer les e‑mails au format MSG, appelez la méthode fetch_message de la ImapClient classe. Elle renvoie le message dans une instance de la MailMessage classe. La méthode MailMessage.save() peut alors être appelée pour enregistrer le message au format MSG. Le fragment de code suivant vous montre comment sauvegarder les messages au format MSG.

Récupérer les paramètres supplémentaires du message (info de résumé)

Le fragment de code ci‑dessous montre comment interagir avec un serveur de messagerie en utilisant Aspose.Email ImapClient pour envoyer et manipuler les messages électroniques. Le code utilise le UID du message pour récupérer les informations de résumé avec des paramètres supplémentaires ("X-GM-MSGID", "X-GM-THRID"). Des informations similaires sont récupérées en utilisant le numéro de séquence.

Obtenir l’en-tête List-Unsubscribe

L’en-tête "ListUnsubscribe" est généralement inclus dans les en-têtes des messages électroniques envoyés par les listes de diffusion ou les systèmes de messagerie automatisés. Il fournit un lien ou une adresse e‑mail que les destinataires peuvent utiliser pour se désabonner de la liste de diffusion ou des e‑mails automatisés. Aspose.Email fournit la propriété ’list_unsubscribe’ de la ImapMessageInfo classe pour récupérer cet en-tête. L’extrait de code ci-dessous montre l’utilisation de la propriété et peut être utilisé dans le cadre d’un système d’automatisation du désabonnement des courriels indésirables :

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

message_info_col = client.list_messages()

# Iterate through each message
for imap_message_info in message_info_col:
    print("ListUnsubscribe Header:", imap_message_info.list_unsubscribe)

Obtenir les informations d’identification du message

Lors de la récupération et du traitement des e‑mails, vous pouvez récupérer les détails des messages en utilisant leurs numéros de séquence.

Les fonctionnalités suivantes sont utilisées pour interagir avec une boîte aux lettres IMAP :

Le fragment de code ci‑dessous montre comment obtenir les informations d’identification des messages :

import aspose.email as ae

client = ae.clients.imap.ImapClient("imap.domain.com", 993, "user@domain.com", "pwd", ae.clients.SecurityOptions.SSL_IMPLICIT)

msg_infos = client.list_messages("INBOX")

for msg_info in msg_infos:
    # fetch by sequence number
    msg = client.fetch_message(msg_info.sequence_number)

    # fetch by unique id
    msg = client.fetch_message(msg_info.unique_id)

Lister les pièces jointes des messages e‑mail IMAP

Pour obtenir des informations sur les pièces jointes telles que le nom, la taille sans récupérer les données de la pièce jointe, utilisez les ressources de bibliothèque suivantes :

L’exemple de code ci‑dessous montre comment lister les pièces jointes de chaque e‑mail en utilisant Aspose.Email ImapClient:

# List messages
message_info_col = client.list_messages()

# Iterate through each message
for message_info in message_info_col:
    print(f"Attachments for message with sequence number {message_info.sequence_number}:")

    # List attachments for the current message
    attachment_info_col = client.list_attachments(message_info.sequence_number)

    # Iterate through each attachment
    for attachment_info in attachment_info_col:
        print(f"Attachment: {attachment_info.name} (size: {attachment_info.size})")