2017-04-24 115 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()) 
相關問題