【问题标题】:IMAP fetch() returns command error: BAD [b' Command Argument Error. 12']IMAP fetch() 返回命令错误:BAD [b' 命令参数错误。 12']
【发布时间】:2015-01-14 21:27:03
【问题描述】:

我无法在线查找示例/疑难解答提示,并且不太确定我是否正确解释了文档。任何帮助将不胜感激。

我正在连接到一个电子邮件服务器,并且想要阅读电子邮件的主题和正文。我首先像这样建立连接:

import imaplib
c = imaplib.IMAP4_SSL(hostname, port)
c.login(username, password)

foldername = 'INBOX/SSR'
c.select(str.encode(foldername), readonly = True)

today = datetime.date.today().strftime('%d-%b-%Y')
searchcriteria = '(SENTON '{}')'.format(today)
typ, msg_ids = c.search(None, searchcriteria)
msg_ids = [s.decode('ascii') for s in msg_ids]

对于 msg_ids 中的 idnumber: print(c.fetch(idnumber, "(BODY.PEEK[HEADER])"))

代码、工作和输出看起来都符合预期,直到最后一行,此时我得到了

imaplib.error:FETCH 命令错误:BAD [b' 命令参数错误。 12']

我的思路和随后的测试检查了以下可能的问题:

  1. 字节与字符串。我将输入转换回字节,但错误保持不变
  2. 语法错误:我尝试了其他命令,例如 BODY、SUBJECT 和 ENVELOPE,但仍然收到相同的消息。

我不确定如何解释错误,也不知道从哪里开始。从 pp. 102+ 引用 https://www.rfc-editor.org/rfc/rfc3501.html,我注意到这些值的标签不同,但不明白我的实现有什么问题。我应该如何解释错误?我的语法有什么问题?

附:如果我错了,请纠正我,但 c.search 不应该更改我的目录,是吗?例如,通过选择文件夹名称,我“导航”到所选文件夹,但仅搜索仅返回值并且不应该更改我的位置?

【问题讨论】:

  • b BAD 表示您的命令标记为“b”包含语法错误。 Imaplib 将该标签分配给某物,因此您的下一步是提高 imap 对象的调试级别,并查看究竟是什么 ahs 被标记为“b”。
  • 如何提高调试级别?
  • 我不记得了。但我记得当我需要它时,我在 imaplib 主文档页面的底部附近找到了它。搜索“调试”。
  • 谢谢。我去看看。
  • 这里的诀窍是在文件夹名称中添加双引号。然后它将是foldername = '"INBOX/SSR"'

标签: python-3.x imap


【解决方案1】:

我在尝试列出或选择一个新邮箱时遇到了同样的问题 - BAD [b' Command Argument Error. 12'],在我的情况下,它不适用于“发送箱”,但它适用于“发件箱”,所以空间符号就是重点。

所以它与c.select('"{}"'.format("Sent Box")...一起工作

希望这些信息对您有所帮助。

【讨论】:

  • 在我的情况下,这也很好c.select('"Bulk Mail"')(但c.select("'Bulk Mail'")没有)
【解决方案2】:

你的最后一行不正确msg_ids = [s.decode('ascii') for s in msg_ids]

msg_ids 是一个包含字节字符串的列表,而不是列表的元素 - 例如:[b'123 124 125']

将最后一行更改为msg_ids = msg_ids[0].split(b' '),它将按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2021-02-28
    • 2016-03-10
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    相关资源
    最近更新 更多