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()
それはもう、エラーが表示されませんが、それは私がコードに示すように、被写体を含む電子メールから添付ファイルをダウンロードしようとしています所望の出力のいずれか – qwerty
を与えるものではありません。 'message_from_bytes'を置くと、実行されて何も表示されません。 – qwerty
さて、あなたが尋ねた質問に答えて、このエラーをデバッグ(および修正)するのを助けました。あなたがプログラムで作業しているときに再び立ち往生した場合は、**新しい質問をしてください**。それがあまりにもあまりにも広すぎない場合は、誰かがあなたを助けます。 – alexis