IMAP サーバーで受け取った電子メールの html 添付ファイルをデコードしようとしています。HTMLファイルに通常の文字が含まれている場合は問題なく動作しますが、フランス語のé
文字がある場合は次のようになります。表示される"vous a \xc3\xa9t\xc3\xa9 envoy\xc3\xa9e par"
ものもすべて\n
\r
あります。
私はbeautifulsoupを使ってHTMLコードを検索しています。また、ループを使用してすべてのメールをチェックします (このコードには存在しません)。
imap_server = imaplib.IMAP4_SSL("server",993)
imap_server.login(username, password)
imap_server.select("test")
result, data = imap_server.uid('search', None, "UnSeen")
latest_email_uid = data[0].split()[-1]
result, data = imap_server.uid('fetch', latest_email_uid, '(RFC822)')
raw_email = data[0][1]
raw_email=str(raw_email, 'UTF8')
msg = email.message_from_string(raw_email)
メールを見て、html を見つけたら、それを base64 からデコードして、beautifulsoup に送信します。その後、utf-8変換で印刷します。encode.('utf-8') を latin-1 に置き換えると、特別な文字もあります。
if msg.is_multipart():
for part in msg.walk():
if part.get_content_type() == 'text/html':
attachment= (part.get_payload(decode=1))
soup=BeautifulSoup(attachment)
print (soup.prettify().encode('utf-8'))
else:
print ("No HTML")
私は何か良いものを持たずに多くの文字セットをエンコード、デコードしようとしました。私も試してみましbase64.b64decode(text).decode('utf-16')
たが、それでも同じです\xc3\xa9