首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python imaplib -错误‘意外的repsonse’

python imaplib -错误‘意外的repsonse’
EN

Stack Overflow用户
提问于 2013-06-04 14:34:52
回答 2查看 1.9K关注 0票数 3

您好,我突然遇到一个错误,在一些代码上使用imaplib之前工作得很好。

代码语言:javascript
复制
import imaplib
m = imaplib.IMAP4('myserver','port')
m.login(r'username','password')
m.select()

给了我这个错误

代码语言:javascript
复制
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/imaplib.py", line 649, in select
    typ, dat = self._simple_command(name, mailbox)
  File "/usr/lib/python2.7/imaplib.py", line 1070, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/usr/lib/python2.7/imaplib.py", line 899, in _command_complete
    raise self.abort('command: %s => %s' % (name, val))
imaplib.abort: command: SELECT => unexpected response: '*  1520 EXISTS'

我不确定这是什么意思。电子邮件在其他方面都很好,而且我使用davmail作为服务器。

该程序完整地将具有特定名称的附件保存在特定文件夹中。

我已经一步步通过它了,这肯定是m.select()的问题所在。

直到最近,同样的程序都运行得很好。

我做错了什么,我该如何修复它?

活动日志如下

代码语言:javascript
复制
>>> import imaplib
>>> m = imaplib.IMAP4('server','port')
>>> Debug=4
>>> m.debug
0
>>> m.debug=4
>>> m.debug
4
>>> m.login(r'username','password')
  01:26.55 > HLFI1 LOGIN "username" "password"
  01:30.76 < HLFI1 OK Authenticated
('OK', ['Authenticated'])
>>> m.list()
  01:56.33 > HLFI2 LIST "" *
  02:00.04 < * LIST (\HasNoChildren) "/" "Trash/Sent Messages"
  02:00.04 < * LIST (\HasNoChildren) "/" "Sync Issues/Server Failures"
  02:00.04 < * LIST (\HasNoChildren) "/" "Sync Issues/Local Failures"
  02:00.04 < * LIST (\HasNoChildren) "/" "Sync Issues/Conflicts"
  02:00.04 < * LIST (\HasChildren) "/" "Sync Issues"
  02:00.04 < * LIST (\HasNoChildren) "/" "Junk E-mail"
  02:00.04 < * LIST (\HasNoChildren) "/" "Drafts"
  02:00.04 < * LIST (\HasChildren) "/" "Trash"
  02:00.04 < * LIST (\HasNoChildren) "/" "Sent"
  02:00.04 < * LIST (\HasNoChildren) "/" "Outbox"
  02:00.04 < * LIST (\HasNoChildren) "/" "INBOX"
  02:00.04 < HLFI2 OK LIST completed
('OK', ['(\\HasNoChildren) "/" "Trash/Sent Messages"', '(\\HasNoChildren) "/" "Sync Issues/Server Failures"', '(\\HasNoChildren) "/" "Sync Issues/Local Failures"', '(\\HasNoChildren) "/" "Sync Issues/Conflicts"', '(\\HasChildren) "/" "Sync Issues"', '(\\HasNoChildren) "/" "Junk E-mail"', '(\\HasNoChildren) "/" "Drafts"', '(\\HasChildren) "/" "Trash"', '(\\HasNoChildren) "/" "Sent"', '(\\HasNoChildren) "/" "Outbox"', '(\\HasNoChildren) "/" "INBOX"'])
>>> m.select()
  02:21.37 > HLFI3 SELECT INBOX
  02:30.87 < *  1548 EXISTS
  02:30.87 last 4 IMAP4 interactions:
  00:16.73 < * OK [CAPABILITY IMAP4REV1 AUTH=LOGIN MOVE] IMAP4rev1 DavMail 4.3.0-2125 server ready
  00:16.73 > HLFI0 CAPABILITY
  00:16.74 < * CAPABILITY IMAP4REV1 AUTH=LOGIN MOVE
  00:16.77 < HLFI0 OK CAPABILITY completed
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/imaplib.py", line 649, in select
    typ, dat = self._simple_command(name, mailbox)
  File "/usr/lib/python2.7/imaplib.py", line 1070, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/usr/lib/python2.7/imaplib.py", line 899, in _command_complete
    raise self.abort('command: %s => %s' % (name, val))
imaplib.abort: command: SELECT => unexpected response: '*  1548 EXISTS'

**更新**

我现在已经在python-dev上提交了一个bug

Bug report on Python

David Murray说响应是不符合RFC的

第二次是在davmail sourceforge的

davmail bug report

M guessant说,IMAP有必要保持存活。

我会随时更新这方面的进展..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-04 17:40:18

似乎是RECENT响应中填充空格的消息计数触发了这种情况。我不清楚它应该被归类为Python的imaplib中的错误还是您正在使用的IMAP服务器中的错误。我会争辩说,无论规范怎么说,imaplib都应该对此健壮。也许你应该提交一份bug报告?

(如果您这样做了,请注意添加有关生成此响应的服务器的详细信息。如果它是一个具有可观市场份额的商业产品,修复它是很重要的,而如果它是您自己的简单Python服务器,他们可能不会关心。)

票数 2
EN

Stack Overflow用户

发布于 2019-06-21 12:56:59

发现davmail填充了EXISTS命令的响应,似乎是邮件数在500时。

可接受的回答:

代码语言:javascript
复制
  58:24.54 > PJJD3 EXAMINE INBOX
  58:24.77 < * 486 EXISTS
  58:24.78      matched r'\* (?P<data>\d+) (?P<type>[A-Z-]+)( (?P<data2>.*))?' => ('486', 'EXISTS', None, None)
  58:24.78 untagged_responses[EXISTS] 0 += ["486"]

失败的响应:

代码语言:javascript
复制
  57:50.86 > KPFE3 EXAMINE INBOX
  57:51.10 < *  953 EXISTS
  57:51.10 last 0 IMAP4 interactions:
  57:51.10 > KPFE4 LOGOUT

我已经为github上的imaplib库创建了一个拉取请求,以解决该问题

要修补imaplib允许修改正则表达式的代码,只需在代码中添加以下内容:

代码语言:javascript
复制
imaplib.Untagged_status = imaplib.re.compile(br'\*[ ]{1,2}(?P<data>\d+) (?P<type>[A-Z-]+)( (?P<data2>.*))?')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16911238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档