imap连接邮箱报错:conmand search illegal in state auth ,only allowed in states selected

这个错误一直困扰了我很久,之前网上找的都是说添加 “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)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值