Pythons imaplib:获取命令,带或不带括号,所有项目的 'Invalid Fetch attribute' 错误
Pythons imaplib: fetch command, with or without parentheses, 'Invalid Fetch attribute' error for ALL item
我正在尝试从我的 IMAP 服务器获取邮件。这是我的代码的简短版本:
>>> import imaplib
>>> m = imaplib.IMAP4_SSL(host='my.host.com')
>>> m.login('username', 'password')
>>> m.select('INBOX')
python3.4 中的 imaplib 模块与 RFC 2060 标准兼容。
上面写着:
The FETCH command retrieves data associated with a message in the mailbox. The data items to be fetched can be either a single atom or a parenthesized list.
现在我得到了一些不同的结果,我无法理解:
>>> 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
项不会起作用。
ALL 不是一个获取项,它是一个宏。语法上有点特殊。还有另外两个,FAST 和 FULL。它们就像获取物品,但有一些额外的限制,其中之一是您 运行 进入的。
我建议您只使用等效的获取项目,您将获得您想要的结果,而无需处理特殊限制。来自 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)
我正在尝试从我的 IMAP 服务器获取邮件。这是我的代码的简短版本:
>>> import imaplib
>>> m = imaplib.IMAP4_SSL(host='my.host.com')
>>> m.login('username', 'password')
>>> m.select('INBOX')
python3.4 中的 imaplib 模块与 RFC 2060 标准兼容。 上面写着:
The FETCH command retrieves data associated with a message in the mailbox. The data items to be fetched can be either a single atom or a parenthesized list.
现在我得到了一些不同的结果,我无法理解:
>>> 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
项不会起作用。
ALL 不是一个获取项,它是一个宏。语法上有点特殊。还有另外两个,FAST 和 FULL。它们就像获取物品,但有一些额外的限制,其中之一是您 运行 进入的。
我建议您只使用等效的获取项目,您将获得您想要的结果,而无需处理特殊限制。来自 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)