2017-05-10 9 views
0

TypeError: initial_value must be str or None, not bytesという18行目のエラー(m = email.message_from_string(email_body))に直面しています。私がprint (data[0][1])と言って実行しようとすると、エンコードされた形式で電子メールの出力が得られます。電子メール添付ファイルをダウンロードするスクリプト

エラーをデバッグします。

import imaplib 
import email 
import os 

svdir = 'C:\\Users\\rnandipati\\Downloads' 

mail = imaplib.IMAP4_SSL('outlook.office365.com',993) 
mail.login("[email protected]", "R!") 
mail.select("Inbox") 

typ, msgs = mail.search(None, '(SUBJECT "ADP Files")') 
msgs = msgs[0].split() 

for emailid in msgs: 
    resp, data = mail.fetch(emailid, "(RFC822)") 

    email_body = data[0][1] 
    m = email.message_from_string(email_body) 

    if m.get_content_maintype() != 'multipart': 
     continue 

    for part in m.walk(): 
     if part.get_content_maintype() == 'multipart': 
      continue 
     if part.get('Content-Disposition') is None: 
      continue 

     filename = part.get_filename() 
     if filename is not None: 
      sv_path = os.path.join(svdir, filename) 
      if not os.path.isfile(sv_path): 
       print(sv_path) 
       fp = open(sv_path, 'wb') 
       fp.write(part.get_payload(decode=True)) 
       fp.close() 

答えて

0

emailモジュールは機能message_from_bytesを含みます。 bytesオブジェクトを解析するには、message_from_stringの代わりにその値を使用します。

m = email.message_from_bytes(email_body) 
+0

それはもう、エラーが表示されませんが、それは私がコードに示すように、被写体を含む電子メールから添付ファイルをダウンロードしようとしています所望の出力のいずれか – qwerty

+0

を与えるものではありません。 'message_from_bytes'を置くと、実行されて何も表示されません。 – qwerty

+0

さて、あなたが尋ねた質問に答えて、このエラーをデバッグ(および修正)するのを助けました。あなたがプログラムで作業しているときに再び立ち往生した場合は、**新しい質問をしてください**。それがあまりにもあまりにも広すぎない場合は、誰かがあなたを助けます。 – alexis

関連する問題