2012-02-20 13 views
0

アンドロイドのデフォルトのメールアプリを除いて、私がテストしたすべてのメールクライアントから送信された添付ファイルを読むことができます。それはアンドロイドのGmailアプリを介して動作します。imaplibでメールからアンドロイド添付ファイルを取得する

ここでは、コードの一部です:私はアンドロイドのデフォルトのメールアプリから1つの添付ファイルを送信する場合

import email as emaillib 

result, data = imap_conn.uid('fetch', email_id, '(RFC822)') 
raw_email = data[0][1] 

get_attachments(emaillib.message_from_string(raw_email)) 

def get_attachments(email_message_instance): 
    attachments = [] 
    for part in email_message_instance.walk(): 
     if part.get_content_maintype() == 'multipart': 
      continue 
     if part.get('Content-Disposition') is None: 
      continue 

     data = part.get_payload(decode=True) 
     if not data: 
      continue 
     filename = part.get_filename() 

     print 'appending attachment with filename: ', filename 
     attachments.append((filename, data)) 

    return attachments 

はそれが出力します。

appending attachment with filename: None 
appending attachment with filename: None 
appending attachment with filename: =?utf-8?B?SU1BRzAxOTMuanBn?= 

任意のアイデア?

答えて

0

私は問題を解決しました。私のアンドロイドのデフォルトのメールアプリケーションは、すべてのコンテンツの処分を書くようです。

ファイル名もすべて邪悪であった。

(私はメディアの添付ファイルでのみ興味があるので)だから私はとの問題を解決:

from email.header import decode_header 
    def get_attachments(email_message_instance): 
     attachments = [] 
     for part in email_message_instance.walk(): 

      if part.get_content_maintype() not in ['image', 'video', 'audio']: 
       continue 

      if part.get('Content-Disposition') is None: 
       continue 

      data = part.get_payload(decode=True) 
      if not data: 
       continue 

      filename = part.get_filename()  
      filename = u' '.join(w.decode(e or 'ascii') for w,e in decode_header(filename))   
      attachments.append((filename, data)) 

     return attachments 
関連する問題