2015-01-05 1 views
0

IMAP 서버에서 메시지를 가져 오려고합니다. python3.4에서Pythons imaplib : 괄호 사용 여부와 상관없이 모든 항목에 대해 '잘못된 가져 오기 속성'오류가 발생했습니다.

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

은 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 항목이 작동하지 않기 때문입니다.

답변

2

모두는 가져 오기 항목이 아니며 매크로입니다. 구문에서 약간 특별한 경우입니다. 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) 
관련 문제