即使从LIST命令列出,也无法选择文件夹

时间:2014-09-15 08:26:22

标签: python google-app-engine gmail imap gmail-imap

这里是LIST命令的(修剪)输出:

[... ((u'\\HasNoChildren', u'\\Inbox'), u'/', u'\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435'),
     ((u'\\Noselect', u'\\HasChildren'), u'/', u'[Gmail]'),
     ((u'\\HasNoChildren', u'\\Trash'), u'/', u'[Gmail]/\u041a\u043e\u0440\u0437\u0438\u043d\u0430'),
     ((u'\\HasNoChildren', u'\\Sent'), u'/', u'[Gmail]/\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435') ...]

我想选择名为\Inbox的{​​{1}}文件夹:

Входящие

但是我收到以下错误:

client.select_folder(u'\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435')

它说select failed: u'[NONEXISTENT] Unknown Mailbox: &BBIERQQ+BDQETwRJBDgENQ- (Failure)' 即使它存在且邮箱名称看起来像乱码(或编码?)编辑:它是utf7编码的字符串。

请注意,NONEXISTENTdefault name for Inbox for Russian accounts

选择其他文件夹(Входящие\Trash)可以正常工作。

\Sent

我尝试创建一个名为>>> client.select_folder(u'[Gmail]/\u041a\u043e\u0440\u0437\u0438\u043d\u0430') {u'READ-WRITE': True, u'EXISTS': 115, ... } >>> client.select_folder(u'[Gmail]/\u041e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435') {u'READ-WRITE': True, u'EXISTS': 6013, ... } 的文件夹(我把它翻了一倍,因为它是一个保留/默认文件夹名称,因此无法使用),而不是我自己的(非俄罗斯)帐户下来测试,我能够成功地选择它。所以我怀疑这个库有编码/解码问题:

ВходящиеВходящие

P.S。我正在使用IMAPClient包装器库,它可以很好地处理与IMAP的unicode。我之前遇到过其他帐户中的其他unicode文件夹名称,并且库能够毫无问题地选择它们。

编辑:澄清了一些unicode字符串值和更多代码段

1 个答案:

答案 0 :(得分:1)

这看起来像是谷歌专有的XLIST命令的输出,而不是LIST。 XLIST现已弃用,但看起来IMAPCLIENT仍然支持xlist_folders()方法。

调用XLIST时,服务器返回INBOX文件夹的本地化名称。但是,根据IMAP规范(RFC 3501),INBOX文件夹的名称只能是“INBOX”(不区分大小写)。 XLIST返回的本地化INBOX名称可以显示给用户,但客户端在与服务器通信时需要使用INBOX(或收件箱或InBoX)。

http://imapclient.readthedocs.org/en/latest/上的xlist_folders()文档中也对此进行了讨论。