Comment effectuer une recherche IMAP en Python (en utilisant Gmail et imaplib)?
Dans Gmail, j'ai un tas de étiquetés messages.
Je voudrais utiliser un client IMAP pour obtenir ces messages, mais je ne suis pas sûr de ce que la recherche d'incantation est.
c = imaplib.IMAP4_SSL('imap.gmail.com')
c.list()
('OK', [..., '(\\HasNoChildren) "/" "GM"', ...])
c.search(???)
Je ne suis pas de trouver de nombreux exemples de ce genre de chose.
source d'informationauteur Jeremy Dunck
Vous devez vous connecter pour publier un commentaire.
imaplib
est intentionnellement une mince enveloppe le protocole IMAP, je suppose que pour permettre à un plus grand degré de flexibilité de l'utilisateur et une plus grande capacité à s'adapter aux changements dans l'IMAP spécification. En conséquence, il n'a pas vraiment d'offre aucune structure de vos requêtes de recherche et vous oblige à être familier avec le IMAP spécification.Comme vous le verrez dans la section "6.4.4. Commande de RECHERCHE", il y a beaucoup de choses que vous pouvez spécifier pour le critère de recherche. Notez que vous devez
SELECT
une boîte aux lettres IMAP (du nom d'un dossier) avant de vous pouvez rechercher quoi que ce soit. (Une recherche sur plusieurs dossiers simultanément nécessite de multiples connexions IMAP, ce que je comprends.)IMAP4.list
pour vous aider à comprendre ce que la boîte aux lettres d'identificateurs.Également utile dans la formulation de la chaîne de caractères que vous passer à
imaplib
est "9. Syntaxe formelle" de la RFC lié ci-dessus.La
r'(\HasNoChildren) "/"'
est une boîte aux lettres drapeau sur la racine de la boîte aux lettres,/
. Voir "7.2.6. DRAPEAUX de Réponse".Bonne chance!
Les étiquettes sont accessibles exactement comme les dossiers IMAPselon Google.
J'ai été assez surpris de voir que imaplib ne fait pas beaucoup de la réponse de l'analyse. Et il semble que les réponses ont été conçues pour être difficile à analyser.
FWIW, pour répondre à ma propre question:
c.recherche(None, 'G')
(Je n'ai aucune idée de ce que l' '(\HasNoChildren) " /"" partie.)
Le moyen le plus facile à utiliser imaplib avec Gmail est d'utiliser le
X-GM-RAW
attribut tel que décrit dans le Gmail Imap Extensions de page.Le processus devrait être comme ceci:
D'abord vous connecter au compte avec le mail et le mot de passe:
Puis connectez-vous à un des dossiers/les étiquettes:
Si nécessaire, vous pouvez lister tous les dossiers disponibles et labels
c.list()
.Enfin, l'utilisation de la méthode de recherche:
Dans le
gmail_search
vous pouvez utiliser la même syntaxe de recherche utilisés dans gmail de recherche avancée.La commande de recherche sera de retour le statut de la commande et l'id de tous les messages qui correspondent à vos gmail_search.
Après cela, vous pouvez chercher chaque messages par id: