Невозможно получить сообщения gmail из любой папки, кроме папки "Входящие" (проблема Python3)
обновление: мой код работает под python 2.6.5, но не python 3 (я использую 3.4.1).
Я не могу искать сообщения в папках" вся почта "или" отправленная Почта " - я получаю исключение:
imaplib.error: SELECT command error: BAD [b'Could not parse command']
мой код:
import imaplib
m = imaplib.IMAP4_SSL("imap.gmail.com", 993)
m.login("myemail@gmail.com","mypassword")
m.select("[Gmail]/All Mail")
используя m.select("[Gmail]/Sent Mail")
не работает.
но чтение из папки "Входящие" работает:
import imaplib
m = imaplib.IMAP4_SSL("imap.gmail.com", 993)
m.login("myemail@gmail.com","mypassword")
m.select("inbox")
...
я использовал почту.команда list() для проверки имен папок правильно:
b'(HasNoChildren) "/" "INBOX"',
b'(Noselect HasChildren) "/" "[Gmail]"',
b'(HasNoChildren All) "/" "[Gmail]/All Mail"',
b'(HasNoChildren Drafts) "/" "[Gmail]/Drafts"',
b'(HasNoChildren Important) "/" "[Gmail]/Important"',
b'(HasNoChildren Sent) "/" "[Gmail]/Sent Mail"',
b'(HasNoChildren Junk) "/" "[Gmail]/Spam"',
b'(HasNoChildren Flagged) "/" "[Gmail]/Starred"',
b'(HasNoChildren Trash) "/" "[Gmail]/Trash"'
Я после решения этих вопросов, но они не работают для меня:
imaplib - каково правильное имя папки для архива / всей почты в Gmail?
я не могу искать отправленные письма в Gmail с Python
вот полный образец программы, которая не работает на Python 3:
import imaplib
import email
m = imaplib.IMAP4_SSL("imap.gmail.com", 993)
m.login("myemail@gmail.com","mypassword")
m.select("[Gmail]/All Mail")
result, data = m.uid('search', None, "ALL") # search all email and return uids
if result == 'OK':
for num in data[0].split():
result, data = m.uid('fetch', num, '(RFC822)')
if result == 'OK':
email_message = email.message_from_bytes(data[0][1]) # raw email text including headers
print('From:' + email_message['From'])
m.close()
m.logout()
следующее исключение:
Traceback (most recent call last):
File "./eport3.py", line 9, in <module>
m.select("[Gmail]/All Mail")
File "/RVM/lib/python3/lib/python3.4/imaplib.py", line 682, in select
typ, dat = self._simple_command(name, mailbox)
File "/RVM/lib/python3/lib/python3.4/imaplib.py", line 1134, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/RVM/lib/python3/lib/python3.4/imaplib.py", line 965, in _command_complete
raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SELECT command error: BAD [b'Could not parse command']
здесь соответствующая версия Python 2 работает:
import imaplib
import email
m = imaplib.IMAP4_SSL("imap.gmail.com", 993)
m.login("myemail@gmail.com","mypassword")
m.select("[Gmail]/All Mail")
result, data = m.uid('search', None, "ALL") # search all email and return uids
if result == 'OK':
for num in data[0].split():
result, data = m.uid('fetch', num, '(RFC822)')
if result == 'OK':
email_message = email.message_from_string(data[0][1]) # raw email text including headers
print 'From:' + email_message['From']
m.close()
m.logout()
1 ответов
Как указано в ответ:
попробуйте использовать m.выберите ('"[Gmail] / All Mail"'), чтобы двойные кавычки были переданы. Я подозреваю, что imaplib неправильно цитирует строку, поэтому сервер получает то, что выглядит как два аргумента: [Gmail]/All и Mail.
и работает в python v3.4.1
import imaplib
import email
m = imaplib.IMAP4_SSL("imap.gmail.com", 993)
m.login("myemail@gmail.com","mypassword")
m.select('"[Gmail]/All Mail"')
result, data = m.uid('search', None, "ALL") # search all email and return uids
if result == 'OK':
for num in data[0].split():
result, data = m.uid('fetch', num, '(RFC822)')
if result == 'OK':
email_message = email.message_from_bytes(data[0][1]) # raw email text including headers
print('From:' + email_message['From'])
m.close()
m.logout()