【问题标题】:imaplib.select on big inbox: Too many arguments for command大收件箱上的 imaplib.select:命令参数太多
【发布时间】:2012-07-29 00:38:22
【问题描述】:

我正在尝试从 python 脚本访问我在 Gmail 中的电子邮件。我使用的代码如下:

import imaplib
m = imaplib.IMAP4_SSL("imap.gmail.com")
m.login("username","password")
m.select("[Gmail]/All Mail")

在 python 2 中运行此代码时,它运行良好,我得到了我所有电子邮件的列表。在 python 3 hoverer 中失败并出现错误

>>> m.select("[Gmail]/All Mail")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.2/imaplib.py", line 674, in select
    typ, dat = self._simple_command(name, mailbox)
  File "/usr/lib/python3.2/imaplib.py", line 1121, in _simple_command
    return self._command_complete(name, self._command(name, *args))
  File "/usr/lib/python3.2/imaplib.py", line 957, in _command_complete
    raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SELECT command error: BAD [b'[CLIENTBUG] Too many arguments for command']

我做了一些测试。它适用于其他文件夹,例如“收件箱”,我只收到 400 封电子邮件(而“所有邮件”中为 6000 封)。

这是与列表大小有关的问题吗?为什么 python 2 和 3 不一样?

谢谢

【问题讨论】:

    标签: python python-3.x imap gmail-imap


    【解决方案1】:

    尝试使用m.select('"[Gmail]/All Mail"'),以便传输双引号。

    我怀疑 imaplib 没有正确引用字符串,所以服务器得到了两个参数:[Gmail]/AllMail

    【讨论】:

    • 很好用。所以这意味着在 Python 3 中将每个单词视为不同的参数会是一个问题?
    • 看起来这是 Python3 的 imaplib 中的一个问题,没有检测到参数需要引用。一般来说,如果您的字符串中包含字母和数字以外的任何内容,最好自己引用它们。
    • 对我来说,问题是 byte 字符串 vs unicode string 一个。如果您使用的是 unicode 字符串,imaplib 不会检测到它需要引用,您应该自己引用它。这是由于 imaplib 的 _checkquote() 方法中的一个错误。作为参考,我使用的是 imaplib 2.58。
    • 顺便说一句,如果您使用的是 unicode 字符串(或者如果 imaplib 没有检测到它需要引用文件夹名称出于任何其他原因),您可以使用 imaplib 的 _quote() 方法自己引用文件夹名称:@ 987654327@.
    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2020-03-23
    • 2012-08-05
    • 2020-11-21
    • 2019-08-14
    • 2020-09-18
    • 2020-03-27
    • 2021-07-26
    相关资源
    最近更新 更多