2016-03-19 6 views
1

私はカスタムメールエージェントを作成しようとしています。 (リストからすべてのプリントをカット)ので、このコードを、私はすべてのメールを取得しようとしていますが、私のメールボックスはmailboxnamesのポーランドの手紙を持っている... :Pythonがユニコード文字でメールボックスを取得しています

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'ですか?生の 'line'の例を追加できますか? – ArtOfCode

答えて

2

エンコーディングは、RFC3501のセクション5.1.3で定義されているように、国際的なメールボックス名に使用される規約であるIMAP4 Modified UTF-7です。

残念ながら、imaplibモジュールは現在サポートしていませんが、近い将来に変更される可能性のあるpythonバグトラッカーにはいくつかの問題があります(issue 5305およびissue 22598など)。

とにかく、これを処理するサードパーティのパッケージ(たとえば、imapclient)を見つけなければならないようです。

関連する問題