0

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括弧付きのアイテムを使用できない理由を誰かに説明してもらえますか?

私が尋ねている理由は、パラメーターに括弧を自動的に追加するIMAPClientALLモジュールを使用しているため、アイテムが機能しないためです。

4

1 に答える 1

3

ALL はフェッチ項目ではなく、マクロです。構文の少し特殊なケース。他に FAST と FULL の 2 つがあります。それらはフェッチアイテムに似ていますが、いくつかの追加の制限があり、そのうちの1つに遭遇しました.

同等のフェッチ項目を使用するだけで、特別な制限に対処する必要なく、必要な結果が得られることをお勧めします。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)
于 2015-01-05T17:28:05.107 に答える