Поиск в Gmail с использованием imaplib - PullRequest
4 голосов
/ 02 марта 2011
import imaplib

user = raw_input("Enter your GMail username:")
pwd = getpass.getpass("Enter your password: ")


m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login(user,pwd)
m.select("[Gmail]/Inbox") # here you a can choose a mail box like INBOX instead
m.search("NEW")

Я пытаюсь выбрать только новые сообщения в Gmail через imap в Python. Проблема в том, что я всегда получаю следующую ошибку:

imaplib.error: команда SEARCH недопустима в состоянии AUTH

Я прогуглил это и прочитал, что мне нужно использовать imap4, но я уже использую его, я не могу понять, как его решить.

Ответы [ 4 ]

4 голосов
/ 02 марта 2011

Кажется, проблема в том, что нет почтового ящика с именем [Gmail]/Inbox. Получить список всех действительных почтовых ящиков можно, позвонив по номеру m.list().

.

Я обнаружил это с помощью интерактивной оболочки Python (с Python 2.6), где он показывает ответ от сервера IMAP для каждой операции IMAP.

Примечание. При использовании интерактивной оболочки Python импорт pprint и вызов pprint.pprint(m.<method of m>(<params>)), вероятно, будут хорошей идеей для некоторых команд IMAP, которые отправляют много информации.

1 голос
/ 25 марта 2011
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"')
1 голос
/ 02 марта 2011

Еще одна вещь - функция imaplib select () выбирает INBOX для вас по умолчанию, кажется, чище.

http://docs.python.org/library/imaplib.html#imaplib.IMAP4.select

0 голосов
/ 10 февраля 2018

Для меня это было "[Gmail]", что было проблематично:

т.е. изменить это:

m.select("[Gmail]/Inbox") 

к этому:

m.select("Inbox") 

В любом случае, использование m.list (), как предложено выше, является хорошим началом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...