这个错误一直困扰了我很久,之前网上找的都是说添加 “ID” 字段 参数,添加客户端身份信息,尝试多次也没有解决。
实际还是自己太粗心,没有注意具体是哪里报的错,后发现是下面的问题:
conn.select(mailbox)
进到代码里可以看到
def select(self, mailbox='INBOX', readonly=False):
"""Select a mailbox.
Flush all untagged responses.
(typ, [data]) = <instance>.select(mailbox='INBOX', readonly=False)
'data' is count of messages in mailbox ('EXISTS' response).
Mandated responses are ('FLAGS', 'EXISTS', 'RECENT', 'UIDVALIDITY'), so
other responses should be obtained via <instance>.response('FLAGS') etc.
"""
self.untagged_responses = {} # Flush old responses.
self.is_readonly = readonly
if readonly:
name = 'EXAMINE'
else:
name = 'SELECT'
typ, dat = self._simple_command(name, mailbox)
if typ != 'OK':
self.state = 'AUTH' # Might have been 'SELECTED'
return typ, dat
self.state = 'SELECTED'
如果typ不是OK,那么state被赋值AUTH返回,并不是SELECTED和报错信息对上了。
解决办法很简单,就是判断返回状态是否是OK,代码如下:
status,msgs = conn.select(mailbox)
while status != 'OK':
status,msgs = conn.select(mailbox)