ПОИСК ДО/ПОСЛЕ с Pythons imaplib

У меня есть IMAP-скрипт меньшего размера, написанный на Python (3.2).

Моя строка поиска выглядит так:

typ, data = M.search(None, 'FROM', '"MyName"')

Я получаю ожидаемые результаты. Однако, если я изменю его на что-то вроде:

typ, data = M.search(None, 'AFTER', '"01-Jan-2010"')

(с указанной датой или без нее я получаю эту ошибку

Traceback (most recent call last):
  File "./priv/imap.py", line 100, in <module>
    main()
  File "./priv/imap.py", line 93, in main
    print(to_json(fetch_result(M, args), args))
  File "./priv/imap.py", line 51, in fetch_result
    typ, data = M.search(None, 'AFTER', '"01-Jan-2010"')
  File "/usr/lib/python3.2/imaplib.py", line 652, in search
    typ, dat = self._simple_command(name, *criteria)
  File "/usr/lib/python3.2/imaplib.py", line 1121, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/usr/lib/python3.2/imaplib.py", line 957, in _command_complete
    raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SEARCH command error: BAD [b'Could not parse command']

Я понятия не имею, почему это было бы незаконно, но любая помощь будет оценена по достоинству! Кроме того, я в конечном итоге хочу использовать «YOUNGER 1234567», чтобы выполнить более точную фильтрацию, но я не уверен, поддерживает ли это gmail/python.

заранее спасибо


person Martin Hansen    schedule 11.04.2011    source источник


Ответы (2)


Вы можете использовать такой поиск:

Но, похоже, он не поддерживает подробное время, а только дату.

а дата является внутренней датой (без учета времени и часового пояса) электронной почты.

M.search(None, '(SINCE "01-Jan-2012")')
M.search(None, '(BEFORE "01-Jan-2012")')
M.search(None, '(SINCE "01-Jan-2012" BEFORE "02-Jan-2012")')
person Green Su    schedule 16.02.2012
comment
Скобки не мешают, но я нашел их ненужными, по крайней мере, на Gmail. - person Mattwmaster58; 12.09.2018
comment
В некоторых случаях требуются скобки - person kbickar; 25.01.2019
comment
Скобки необходимы в некоторых случаях, даже во многих случаях, но никогда не для с/до, потому что формат даты использует только az, 0-9 и -, и ни один из них не нуждается в кавычках. - person arnt; 16.12.2019

можешь попробовать:

typ, data = M.search(None, '(SINCE "01-Jan-2010")')

или если вы используете UID:

typ, data = M.uid('search', '(SINCE 01-Jan-2010)')
person Avadhesh    schedule 11.04.2011
comment
можно ли также использовать время с датой? - person ; 11.08.2011
comment
@ user250145 нет, эти команды выполняются без учета времени и часового пояса: tools.ietf .org/html/rfc3501.html#section-6.4.4 - person lajarre; 31.10.2012