使用imaplib,如何在没有\\ NoSelect属性的情况下创建邮箱

时间:2011-05-09 19:38:46

标签: python gmail imaplib gmail-imap

我正在尝试在gmail IMAP帐户中创建目录树。我在imaplib中使用了“create()”命令,但它似乎将\\ Noselect属性添加到创建的文件夹中。这打破了gmail的嵌套标签功能 - 有没有办法删除\\ Noselect属性,或者首先避免它被创建?

示例:

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

2 个答案:

答案 0 :(得分:3)

我找到了一个解决方案 - 不确定它是否是“最佳”方式。在一个命令中创建嵌套邮箱时,顶级邮箱会自动标记为\\ Noselect。虽然它可能很糟糕,但您可以通过明确创建每个级别来删除此标志。

示例:

folder = "abc/def/ghi/jkl"

target = ""

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

我会留下问题,看看是否有人有更好的解决方案。

答案 1 :(得分:2)

bjeanes:只要我不使用尾随的层次结构分隔符,Sam的解决方案就适用于我。

所以,如果我想创建嵌套文件夹a / b / c,我首先创建简单的“a”。如果我执行xlist,则设置hasNoChildren标志。现在我创建“a / b”,xlist现在将显示设置为“hasChildren”标志的“a”,设置“hasNoChildren”标志的“a / b”。最后,我创建了“a / b / c”,现在“b”也设置了“hasChildren”标志。看一下gmail web界面也证实了这一点。

萨姆:谢谢你搞清楚并发布解决方案。 “Hacky”击败“不工作”。 :^)