【问题标题】:Pythons imaplib: fetch command, with or without parentheses, 'Invalid Fetch attribute' error for ALL itemPythons imaplib:获取命令,带或不带括号,所有项目的“无效获取属性”错误
【发布时间】:2015-03-03 01:19:35
【问题描述】:

我正在尝试从我的 IMAP 服务器获取消息。这是我的代码的简短版本:

>>> import imaplib
>>> m = imaplib.IMAP4_SSL(host='my.host.com')
>>> m.login('username', 'password')
>>> m.select('INBOX')

python3.4 中的 imaplib 模块兼容RFC 2060 标准。 上面写着:

FETCH 命令检索与邮箱中的消息关联的数据。要获取的数据项可以是单个原子或带括号的列表。

现在我得到了一些不同的结果,我无法理解:

>>> m.fetch('1613', '(ALL)')
imaplib.error: FETCH command error: BAD [b'Invalid Fetch attribute ALL']

>>> m.fetch('1613', 'ALL')
('OK', [b'1613 (FLAGS (\\Seen) INTERNALDATE' ... etc ...

>>> m.fetch('1613', '(FLAGS)')
('OK', [b'1613 (FLAGS (\\Seen))'])

>>> m.fetch('1613', 'FLAGS')
('OK', [b'1613 (FLAGS (\\Seen))'])

>>> m.fetch('1613', '(FLAGS ENVELOPE)')
('OK', ... etc ...

>>> m.fetch('1613', '(FLAGS ALL)')
imaplib.error: FETCH command error: BAD [b'Invalid Fetch attribute ALL']

有人可以向我解释为什么我不能使用带括号的 ALL 项目吗?

我之所以问是因为我使用的是IMAPClient模块,它会自动将括号添加到参数中,因此ALL项将不起作用。

【问题讨论】:

    标签: python imap fetch imaplib imapclient


    【解决方案1】:

    ALL 不是获取项,而是宏。语法中的一个特殊情况。还有另外两个,FAST 和 FULL。它们就像 fetch items,但有一些额外的限制,您遇到了其中之一。

    我建议您只使用等效的 fetch 项目,您将获得所需的结果,而无需处理特殊限制。来自 RFC3501:

      ALL
         Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE)
    
      FAST
         Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE)
    
      FULL
         Macro equivalent to: (FLAGS INTERNALDATE RFC822.SIZE ENVELOPE BODY)
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      相关资源
      最近更新 更多