使用python的imaplib获取邮箱列表时出现文件夹的西里尔文名称

时间:2017-07-21 16:05:46

标签: python imaplib

我正在尝试使用python和IMAP协议获取我的Gmail帐户的文件夹(或Google的条款,标签)。为实现这一目标,我有以下代码(为简单起见,省略了异常处理和其他细节):

mail = imaplib.IMAP4_SSL('imap.gmail.com')
rv, data = mail.login(EMAIL_ACCOUNT, psw)
rv, folders = mail.list()

if rv != 'OK':
    for folder in folders:
        list_response_pattern = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)')
        folder = folder.decode("utf-8")
        flags, delimiter, name = list_response_pattern.match(folder).groups()
        name = mailbox_name.strip('"')
        print(name)

输出是我的邮箱列表(“INBOX”,“垃圾”,“重要”等)。 但是,这段代码的问题是,如果邮箱名称是英语以外的语言(比如俄语),我会得到奇怪的字符串而不是真实的名字(我猜,这是一种编码)。例如,我的一个邮箱名为“Личное”。而不是“Личное”,我在输出中得到类似'&amp; BBsEOARHBD0EPgQ1'的内容。

前段时间,某人已经问过an identical question,但到目前为止还没有得到答复。我决定重复这个问题,因为我花了一整天时间试图谷歌这个。没什么......请帮帮我。我完全陷入了这个阶段。

P.S。看起来在PHP中,有a function来解决这个问题

1 个答案:

答案 0 :(得分:0)

您可以使用from imapclient import imap_utf7将字节解码为西里尔字母,而不是使用'|'分割名称。喜欢:

from imapclient import imap_utf7
# Вывожу список папок
for folder in mail.list()[1]:
    # b'(\\Marked \\HasNoChildren) "|" "&BB0EEAQRBB4EIA-"'
    decoded_folder = imap_utf7.decode(folder)
    # (\Marked \HasNoChildren) "|" "НАБОР"
    folder_name = decoded_folder.split(' "|" ')
    # "НАБОР"