2017-04-24 5 views
1

imaplibを使用して純粋なテキスト形式のpython電子メールを取得する方法が不思議です。 私がこれまで持っているもの:imaplibを使用してpython電子メールから純粋なテキストを取得する方法

from datetime import datetime 
import imaplib ,email 
IMAP_SERVER = 'imap.gmail.com' 
EMAIL_ACCOUNT = "[email protected]" 
PASSWORD = "password" 
    rv, data = M.search(None, "ALL") 
    if rv != 'OK': 
     print("No messages found!") 
     return 

    if data != ['']: # if not empty list means messages exist 
     for num in data[0].split(): 
      rv, data = M.fetch(num, '(RFC822)') #(BODY[HEADER.FIELDS (SUBJECT FROM)]) 
      if rv != 'OK': 
       print("ERROR getting message", num) 
       return 

      message = email.message_from_bytes(data[0][1]) 
      text = "" 
      if message.is_multipart(): 
       for payload in message.get_payload(): 
        text = payload.get_payload() 
      else: 
        text = message.get_payload() 

      res = { 
       'From': email.utils.parseaddr(message['From'])[1], 
       'From name': email.utils.parseaddr(message['From'])[0], 
       'Time': datetime.fromtimestamp(email.utils.mktime_tz(email.utils.parsedate_tz(message['Date']))), 
       'To': message['To'], 
       'Subject': email.header.decode_header(message["Subject"])[0][0], 
       'Text': text 
      } 
      print(res['Text']) 

    else: 
     print("Nothing to work with.") 

私はこの方法でそれを行う場合は、コードは動作しますが、私は出力として

<div dir="ltr">test 3 body</div> 

を取得します。 純粋に「テスト3ボディ」を出す方法はありますか?

答えて

1

あなたはちょうどあなたがここのような正規表現を使用する必要があり、文字列からHTMLタグを取り除くことに積み重ねる場合:

import re 

s = '<div dir="ltr">test 3 body</div>' 
print(re.sub('<[^<]+?>', '', s)) 

出力:test 3 body

sはあなたのres['Text']なければなりません。

+0

うわー、素敵!どうもありがとうございました!完璧に動作します(y) –

1

電子メールメッセージのプレーンテキスト部分を探します。

for payload in message.walk(): 
    if payload.get_content_type().lower() == 'text/plain': 
     print(payload.get_payload()) 
関連する問題