这里是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编码的字符串。
请注意,NONEXISTENT
是default 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字符串值和更多代码段
答案 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()文档中也对此进行了讨论。