2017-04-08 61 views
0

我想通过IMAP使用Google帐户收到G-mail。 所以我发现了一些基本的代码如何使用IMAP。 我用我的Google帐户运行它。但我得到一些错误。 我不知道函数或参数的作用,所以请帮助我,如果你有Gmail帐户,并知道功能的作用。IMAP调用Gmail期间出现“SELECT command error BAD”错误

这是我的代码,我隐藏了我的帐户信息,所以真实帐户与我的不同。

#!/usr/bin/env python 

import sys 
import imaplib 
import getpass 
import email 
import email.header 
import datetime 
EMAIL_ACCOUNT = "[email protected]" 
EMAIL_PASSWORD = "password" 
# Use 'INBOX' to read inbox. Note that whatever folder is specified, 
# after successfully running this script all emails in that folder 
# will be marked as read. 
EMAIL_FOLDER = "Top Secret/PRISM Documents" 
def process_mailbox(M): 

rv, data = M.search(None, "ALL") 
if rv != 'OK': 
    print("No messages found!") 
    return 
    for num in data[0].split(): 
     rv, data = M.fetch(num, '(RFC822)') 
     if rv != 'OK': 
      print("ERROR getting message", num) 
      return 
     msg = email.message_from_bytes(data[0][1]) 
     hdr = 
     email.header.make_header(email.header.decode_header(msg['Subject'])) 
     subject = str(hdr) 
     print('Message %s: %s' % (num, subject)) 
     print('Raw Date:', msg['Date']) 
     # Now convert to local date-time 
     date_tuple = email.utils.parsedate_tz(msg['Date']) 
     if date_tuple: 
      local_date = datetime.datetime.fromtimestamp(
       email.utils.mktime_tz(date_tuple)) 
      print ("Local Date:", \ 
       local_date.strftime("%a, %d %b %Y %H:%M:%S")) 
M = imaplib.IMAP4_SSL('imap.gmail.com') 
try: 
    rv, data = M.login(EMAIL_ACCOUNT, EMAIL_PASSWORD) 
except imaplib.IMAP4.error: 
    print ("LOGIN FAILED!!! ") 
    sys.exit(1) 
print(rv, data) 
rv, mailboxes = M.list() 
if rv == 'OK': 
    print("Mailboxes:") 
    print(mailboxes) 
rv, data = M.select(EMAIL_FOLDER) 
if rv == 'OK': 
    print("Processing mailbox...\n") 
    process_mailbox(M) 
    M.close() 
else: 
    print("ERROR: Unable to open mailbox ", rv) 
M.logout() 

这是错误的结果。 enter image description here

这是文本错误。

C:\Users\user\AppData\Local\Programs\Python\Python36-32\python.exe C:/Users/user/PycharmProjects/Server/imap.py 
OK [b'[email protected] authenticated (Success)'] 
Mailboxes: 
[b'(\\HasNoChildren) "/" "INBOX"', b'(\\HasChildren \\Noselect) "/" "[Gmail]"', b'(\\Flagged \\HasNoChildren) "/" "[Gmail]/&vMTUXNO4ycDVaA-"', b'(\\HasNoChildren \\Sent) "/" "[Gmail]/&vPSwuNO4ycDVaA-"', b'(\\HasNoChildren \\Junk) "/" "[Gmail]/&wqTTONVo-"', b'(\\Drafts \\HasNoChildren) "/" "[Gmail]/&x4TC3Lz0rQDVaA-"', b'(\\All \\HasNoChildren) "/" "[Gmail]/&yATMtLz0rQDVaA-"', b'(\\HasNoChildren \\Important) "/" "[Gmail]/&yRHGlA-"', b'(\\HasNoChildren \\Trash) "/" "[Gmail]/&1zTJwNG1-"'] 
Traceback (most recent call last): 
    File "C:/Users/user/PycharmProjects/Server/imap.py", line 73, in <module> 
    rv, data = M.select(EMAIL_FOLDER) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\imaplib.py", line 737, in select 
    typ, dat = self._simple_command(name, mailbox) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\imaplib.py", line 1188, in _simple_command 
    return self._command_complete(name, self._command(name, *args)) 
    File "C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\imaplib.py", line 1019, 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'] 

Process finished with exit code 1 
+0

我将错误粘贴为文本,但由于路径而难以找出。 – Jung

+0

如果您将“EMAIL_FOLDER”更改为与“邮箱”列表中某个值相匹配,是否会改变这些内容? –

+0

...顺便说一句,它看起来像你的语法突出显示是错误的 - “def process_mailbox(M):'后面没有缩进。将来,请考虑选择您的*整个*代码并使用'{}'按钮缩进区域以作为代码。 –

回答

0

的调用

M.select(EMAIL_FOLDER) 

不包括任何邮箱的返回从:

rv, mailboxes = M.list() 

确保邮箱名称是有效的。

+1

此外,我相信imaplib有一个错误,它不引用文件夹名称,如果他们有空格,所以可能需要手动完成。 – Max

相关问题