2011-05-09 6 views
2

Gmail IMAP 계정에 디렉터리 트리를 만들려고합니다. imaplib에서 "create()"명령을 사용했지만 생성 된 폴더에 \\ Noselect 특성을 추가하는 것으로 보입니다. 이렇게하면 Gmail의 중첩 레이블 기능이 손상됩니다. \\ Noselect 속성을 제거하거나 처음 생성되는 것을 방지 할 수 있습니까?imaplib을 사용하면 \ NoSelect 특성을 사용하지 않고 사서함을 만들 수 있습니다

예 : 나는 해결책을 알아 냈

>> imap.create("foo/bar") 
('OK', [b'Success']) 
>> imap.list() 
[b'(\\Noselect \\HasChildren) "/" "foo"', b'(\\HasNoChildren) "/" "foo/bar"',... 

답변

3

- 그것이 비록 '가장 좋은'방법 확실하지. 한 명령에서 중첩 된 사서함을 만들 때 최상위 수준의 사서함에는 \\ Noselect라는 플래그가 자동으로 지정됩니다. 해커 일 수도 있지만 명시 적으로 각 수준을 만들어이 플래그를 제거 할 수 있습니다.

예 :

folder = "abc/def/ghi/jkl" 

target = "" 

for level in folder.split('/'): 
    target += "{}/".format(level) 
    imap.create(target) 

나는 사람이 더 나은 솔루션이 있는지 질문을 열어두고 있습니다.

2

bjeanes : 후미 계층 구조 구분 기호를 사용하지 않는 한 샘 솔루션이 작동합니다.

따라서 중첩 폴더 a/b/c를 만들려면 먼저 "a"를 만듭니다. xlist를 수행하면 hasNoChildren 플래그가 설정됩니다. 이제 "a/b"를 만들고 xlist는 "hasChildren"플래그가 설정된 "a"와 "hasNoChildren"플래그가 설정된 "a/b"를 표시합니다. 마지막으로 "a/b/c"를 만들고 "b"는 "hasChildren"플래그도 설정합니다. Gmail 웹 인터페이스를 보면이 사실을 확인할 수 있습니다.

Sam : 솔루션을 게시하고 게시 해 주셔서 감사합니다. "Hacky"는 "작동하지 않습니다." : ^)