Я пытаюсь получить все UID папки INBOX в учетной записи gmail с помощью imaplib (эта учетная запись является новой для тестирования). Сначала он работал нормально (т.е. когда я только отправлял письма на учетную запись), но после перемещения некоторых писем в tra sh мой код теперь возвращает неверное количество UID (8, с 7 электронными письмами в папке входящих) , хотя также отсутствует UID.
con = imaplib.IMAP4_SSL(imap_server, imap_port)
con.login(user, password)
con.select("INBOX")
result, numbers = con.uid('search', None, 'ALL')
uids = numbers[0].split()
В моем конкретном случае c печать "uids" дает следующий список
[b'1', b'3', b'4', b'7', b'8', b'9', b'10', b'11']
Проверка почты вручную путем написания списка [b'1', b'2'..., b'11']
и извлекая темы электронной почты, я обнаруживаю, что существуют уникальные письма для следующих UID:
[b'1', b'2' OR b'3', b'4', b'5', b'6', b'7', ONE OF b'8' to b'11']
b'1'
и b'2'
возвращает ту же почту, b'6'
отсутствует и b'8'
- b'11
возвращает ту же почту
Обыскивая здесь, прежде чем спрашивать, я наткнулся на вопрос: Загрузка вложений из gmail . Ответ содержал следующий фрагмент кода, который выбирает идентификатор для всех писем в папке:
resp, items = m.search(None, "ALL") # you could filter using the IMAP rules here (check http://www.example-code.com/csharp/imap-search-critera.asp)
items = items[0].split() # getting the mails id
Как и в моем коде, только без использования метода uid
. Однако, в моем случае, это делает список:
[b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8']
Так что тоже не правильно. Другой ответ, который я нашел Imaplib со смещением GMail uids пишет:
Кажется, что M.uid
просто указывает, что возвращаемое значение будет UID, поэтому все еще необходимо указать, что отправленные параметры будут идентификаторами UID, а не идентификаторами сообщений. Это исправляет это:
rv, data = M.uid("search", None, 'UID', '29540:*')
И в комментарии:
rv, data = M.uid("search", None, '(UID 29540:*)')
Но оба возвращают ошибку для меня: UID command error: BAD [b'Could not parse command']
Что я делать неправильно, и / или есть ли лучший способ?