Question

Dans Gmail, j'ai plusieurs messages étiquetés.

J'aimerais utiliser un client IMAP pour obtenir ces messages, mais je ne suis pas sûr de ce qu'est l'incantation de recherche.

c = imaplib.IMAP4_SSL('imap.gmail.com')
c.list()
('OK', [..., '(\\HasNoChildren) "/" "GM"', ...])
c.search(???)

Je ne trouve pas beaucoup d'exemples pour ce genre de chose.

Était-ce utile?

La solution

imaplib est intentionnellement une enveloppe mince autour du protocole IMAP, afin de permettre un plus grand degré de flexibilité de l'utilisateur et une plus grande capacité d'adaptation aux modifications de la spécification IMAP. En conséquence, il n’offre pas vraiment de structure pour vos requêtes de recherche et vous oblige à vous familiariser avec le Spécification IMAP .

Comme vous le verrez dans la section "6.4.4. Commande SEARCH ", vous pouvez spécifier beaucoup de choses pour le critère de recherche. Notez que vous devez SELECTIONNER une boîte aux lettres (nom d'un dossier IMAP) avant de pouvoir rechercher quoi que ce soit. Si je comprends bien, la recherche simultanée dans plusieurs dossiers nécessite plusieurs connexions IMAP. IMAP4.list vous aidera à comprendre quels sont les identificateurs de boîte aux lettres.

Également utile pour formuler les chaînes que vous transmettez à imaplib est "9. Syntaxe formelle " de la RFC liée à ci-dessus.

Le r '(\ HasNoChildren) "/" " est un indicateur de boîte aux lettres situé sur la boîte aux lettres racine, / . Voir "7.2.6. DRAPEAUX Réponse ".

Bonne chance!

Autres conseils

import imaplib 
obj = imaplib.IMAP4_SSL('imap.gmail.com', 993)
obj.login('username', 'password')
obj.select('**label name**') # <-- the label in which u want to search message
obj.search(None, 'FROM', '"LDJ"')

Pour utiliser imaplib avec Gmail, le moyen le plus simple consiste à utiliser l'attribut X-GM-RAW , comme décrit dans page Extensions de Gmail Imap .

Le processus serait le suivant:

Connectez-vous d'abord au compte avec l'adresse e-mail et le mot de passe appropriés:

c = imaplib.IMAP4_SSL('imap.gmail.com', 993)
email = 'eggs@spam'
password = 'spamspamspam'
c.login(email, password)

Ensuite, connectez-vous à l'un des dossiers / étiquettes:

c.select("INBOX")

Si nécessaire, vous pouvez répertorier tous les dossiers / étiquettes disponibles avec c.list () .

Enfin, utilisez la méthode de recherche suivante:

gmail_search = "has:attachment eggs OR spam"
status, data = c.search(None, 'X-GM-RAW', gmail_search)

Dans gmail_search , vous pouvez utiliser la syntaxe de recherche utilisée dans recherche avancée gmail .

La commande de recherche renverra l'état de la commande et les identifiants de tous les messages correspondant à votre recherche gmail.

Ensuite, vous pouvez récupérer chaque message par identifiant avec:

for id in data[0].split():
    status, data = gmail.fetch(id, '(BODY[TEXT])')

J'ai été assez surpris qu'imaplib n'analyse pas beaucoup les réponses. Et il semble que les réponses aient été conçues pour être difficiles à analyser.

FWIW, pour répondre à ma propre question:     c.search (Aucun, 'GM')

(Je ne sais pas du tout à quoi sert la partie '(\ HasNoChildren) "/" ";".)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top