I’m trying to setup a cron job for django-helpdesk to create tickets from my inbox. I’ve configured a cron job and then I tried to do this:
python manage.py get_email
It gives me this error:
imaplib.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED
Here’s the full error log:
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/commercial/.virtualenvs/projects/lib/python2.7/site-packages/django/core/management/__init__.py", line 351, in execute_from_command_line
utility.execute()
File "/home/commercial/.virtualenvs/projects/lib/python2.7/site-packages/django/core/management/__init__.py", line 343, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/commercial/.virtualenvs/projects/lib/python2.7/site-packages/django/core/management/base.py", line 394, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/commercial/.virtualenvs/projects/lib/python2.7/site-packages/django/core/management/base.py", line 445, in execute
output = self.handle(*args, **options)
File "/home/commercial/.virtualenvs/projects/lib/python2.7/site-packages/helpdesk/management/commands/get_email.py", line 73, in handle
process_email(quiet=quiet)
File "/home/commercial/.virtualenvs/projects/lib/python2.7/site-packages/helpdesk/management/commands/get_email.py", line 106, in process_email
process_queue(q, logger=logger)
File "/home/commercial/.virtualenvs/projects/lib/python2.7/site-packages/helpdesk/management/commands/get_email.py", line 198, in process_queue
status, data = server.search(None, 'NOT', 'DELETED')
File "/usr/lib64/python2.7/imaplib.py", line 639, in search
typ, dat = self._simple_command(name, *criteria)
File "/usr/lib64/python2.7/imaplib.py", line 1082, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/usr/lib64/python2.7/imaplib.py", line 837, in _command
', '.join(Commands[name])))
imaplib.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED
Are there steps I’m missing somewhere? I’m following what is mentioned here:
https://django-helpdesk.readthedocs.io/en/latest/configuration.html
0 / 0 / 0 Регистрация: 26.08.2017 Сообщений: 5 |
|
1 |
|
Как скопировать отправленные письма в текстовый файл?24.09.2017, 14:11. Показов 1792. Ответов 8
Хочу создать архив своей электронной переписки в отдельном файле.
__________________
0 |
Garry Galler 5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
||||
24.09.2017, 15:06 |
2 |
|||
не пойму, как выйти на Отправленные письма Каталога с именем OUTBOX для отправленных (наподобие INBOX для входящих) не существует. Код # идентификаторы папок folders = { 'Отправленные': b"&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-", 'Исходящие': b"&BBgEQQRFBD4ENARPBEkEOAQ1-", 'Спам': b"&BCEEPwQwBDw-", 'Черновики': b"&BCcENQRABD0EPgQyBDgEOgQ4-", 'Удаленные': b"&BCMENAQwBDsENQQ9BD0ESwQ1-" } Пример использования:
0 |
0 / 0 / 0 Регистрация: 26.08.2017 Сообщений: 5 |
|
24.09.2017, 18:18 [ТС] |
3 |
Спасибо, Garry Galler!
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
24.09.2017, 18:39 |
4 |
mailbox_search_list — это просто моя функция получения писем. У вас должна быть своя — вы же как то написали получение входящих. starttls — это функция из imaplib — странно что вы про нее не знаете: The ssl_context argument is optional and should be a ssl.SSLContext object. This will enable encryption on the IMAP connection.
0 |
a_shel 0 / 0 / 0 Регистрация: 26.08.2017 Сообщений: 5 |
||||
24.09.2017, 19:46 [ТС] |
5 |
|||
Извините, но не посмотрите мой кусок кода. В чем тут ошибка:
Для Входящих работает нормально, а для Отправленных выдает: imaplib.error: Command SEARCH illegal in state AUTH, only allowed in states SELECTED.
0 |
Garry Galler 5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
||||
24.09.2017, 20:24 |
6 |
|||
У меня работает как с IMAP4starttls, так и с IMAP4_SSL.
0 |
0 / 0 / 0 Регистрация: 26.08.2017 Сообщений: 5 |
|
24.09.2017, 23:51 [ТС] |
7 |
Спасибо! Добавлено через 18 минут
0 |
5403 / 3827 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
25.09.2017, 01:06 |
8 |
На Яндексе папка с Отправленными письмами называется ‘Sent’ Хм, на моей яндекс почте никакого Sent нет… В случае наличия кириллических наименований папок на пользовательском ящике у них есть только бинарные идентификаторы в utf7.
0 |
0 / 0 / 0 Регистрация: 26.08.2017 Сообщений: 5 |
|
25.09.2017, 01:53 [ТС] |
9 |
За что купил, за то и продал: по вашему совету вывел список идентификаторов и подобрал подходящий.
0 |
#python #gmail-imap #imaplib
Вопрос:
Я работаю над приложением, которое должно войти в учетную запись электронной почты, чтобы обработать некоторые электронные письма. В этом случае учетная запись электронной почты запускается через google business suite (так что это не домен gmail).
Приложению удается войти в учетную запись электронной почты с помощью этой команды
mail_client = imaplib.IMAP4_SSL(server) mail_client.login(user, password)
Затем мне нужно просмотреть входящие, чтобы у меня был код
mail_client.select("INBOX") (result, messages) = mail_client.search(None, 'ALL')
Это приводит к ошибке
imaplib.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED
Это странно, потому select
что команда не сработала, можно было бы ожидать сообщения об ошибке, связанного с этим. Тем не менее, кажется, что с select
командой все в порядке, но затем в следующей строке она действует так, как будто ничего не выбрано.
Я запустил следующий код, чтобы получить список папок, которые там есть:
for i in mail_client.list()[1]: print(i)
и результат таков
b'(HasNoChildren) "/" "INBOX"' b'(HasChildren Noselect) "/" "[Gmail]"' b'(All HasNoChildren) "/" "[Gmail]/All Mail"' b'(Drafts HasNoChildren) "/" "[Gmail]/Drafts"' b'(HasNoChildren Important) "/" "[Gmail]/Important"' b'(HasNoChildren Sent) "/" "[Gmail]/Sent Mail"' b'(HasNoChildren Junk) "/" "[Gmail]/Spam"' b'(Flagged HasNoChildren) "/" "[Gmail]/Starred"' b'(HasNoChildren Trash) "/" "[Gmail]/Trash"'
Я обнаружил, что код работает, если выбранная папка пуста. Но в тот момент, когда в нем действительно есть почта, я получаю ошибку (даже если раньше она работала пустой). Код также работает, если папка не пуста, но команда поиска ничего не вернет… как в, (result, messages) = mail_client.search(None, '(TO "non-existing@email.address")')
… но в тот момент, когда результат поиска что-то вернет, я получаю ошибку.
Но мне нужно специально поискать в папке «Входящие».
Я также немного изменил код, чтобы проверить:
status, message = mail_client.select('INBOX') print(f"status is {status}") print(f"message is {message}")
и это дает
status is OK message is [b'3']
В поисках решения я нашел различные сообщения, в которых проблема заключалась в именах папок с пробелами, но я не смог найти никого, у кого была бы та же проблема, что и у меня.
Любая помощь будет очень признательна!
Комментарии:
1. Включите трассировку imaplib (debug=5 или что-то в конструкторе? Вам нужно будет проверить документ здесь) Я ожидаю, что вы каким-то образом отключаетесь, или вход в систему на самом деле не удался. Однако журнал может помочь вам/нам выяснить, что произошло между этими двумя шагами.