Python使用unicode字符获取邮箱

时间:2016-03-19 20:59:55

标签: python email unicode

我正在尝试编写自定义邮件代理。 我正在尝试获取所有邮件,但我的邮箱在邮箱名称中有波兰语... 所以这段代码(从列表中删除所有打印件):

def parse_list_response(self, line):
    list_response_pattern = re.compile(r'\((?P<flags>.*?)\) "(?P<delimiter>.*)" (?P<name>.*)')
    line=line.decode(encoding='utf_8')
    flags, delimiter, mailbox_name = list_response_pattern.match(line).groups()
    mailbox_name = mailbox_name.strip('"')
    return (flags, delimiter, mailbox_name)

def fetch_mails(self, from_who, since_when):
    server = imaplib.IMAP4_SSL(self.hostname)
    server.login(self.owner, self.password)
    rc, mailboxes = server.list()
    for line in mailboxes:
        mailbox=self.parse_list_response(line)[2]
        server.select(mailbox)
        try:
            messages = server.search('FROM "{}"'.format(from_who))

给我举个例子邮箱:

已解码=(\已标记\ HasNoChildren)“/”“[Gmail] / Oznaczone gwiazdk&amp; AQU - ”

参见:&amp; AQU -...它是波兰语“±”

问题是如何摆脱这个?我找不到如何解码这个字节码

1 个答案:

答案 0 :(得分:2)

编码是IMAP4 Modified UTF-7,这是一种用于国际邮箱名称的约定,如RFC3501第5.1.3节中所定义。

不幸的是,imaplib模块目前还不支持它 - 尽管python错误跟踪器上存在一些问题,表明在不久的将来可能会发生变化(例如issue 5305和{{ 3}})。

无论如何,在此期间,您似乎必须找到第三方包来处理此问题(例如issue 22598)。