2016-03-19 70 views
1

我正在嘗試編寫自定義郵件代理。 我試圖獲取所有郵件,但是我的郵箱裏有mailboxnames拋光信... 所以這個代碼(削減從上市的所有打印):Python獲取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 & AQU-」

參見:& AQU -...它是波蘭的 「A」

的問題是如何擺脫 這個的?我找不到如何解碼此字節碼

+0

什麼類型的對象是'line'傳入方法時?你可以添加一個原始'線路'的例子嗎? – ArtOfCode

回答

2

編碼是IMAP4修改的UTF-7,這是一種用於國際郵箱名稱的約定,如RFC3501的5.1.3部分所定義的。

不幸的是,imaplib模塊目前不支持它 - 儘管python bug跟蹤器有幾個問題表明它可能在不久的將來發生變化(例如issue 5305issue 22598)。

無論如何,與此同時,看起來您必須找到一個第三方包來處理這個問題(例如imapclient)。