Python/Django で imaplib を使用してメールを取得しています。
私の目標は、プレーン テキストと HTML の両方のメールを読むことです。
私は使用しています:
mail.select('inbox', readonly=True)
result, data = mail.uid('fetch', email_uid, '(RFC822)')
raw_email = data[0][1]
email_message = email.message_from_string(raw_email)
#print "EMAIL:",email_message
#print "HEADERS",email_message.items()
subject = get_decoded_header(email_message['Subject'])
from_address = get_decoded_header(email_message['From'])
date = email_message['Date']
date = parse_date(date)
body = ''+get_first_text_block(email_message)
get_first_text_block のコード (Web から取得):
def get_first_text_block(email_message_instance):
maintype = email_message_instance.get_content_maintype()
if maintype == 'multipart':
for part in email_message_instance.get_payload():
if part.get_content_maintype() == 'text':
return part.get_payload()
elif maintype == 'text':
return email_message_instance.get_payload()
# In cases of emails with empty body
return ''
さて、これの問題は、テキストがフォーマットされていないように見えることです。具体的には: プレーン テキストの電子メールの場合、テキストは改行、段落、および行間に空行があるのではなく、1 つの大きな統合された文字列として表示されます。
HTML テキストの場合、HTML はまったく表示されず、HTML のフラグメントが内部にあるプレーンテキストとして表示されます (Django で |safe フィルターを使用しても)。
メールのペイロードが文字列に変換されるなどの不具合が起きているのではないかと思いますが、すべてチェックしましたが、どこが間違っているのかわかりませんでした。
私は何を間違っていますか?