2017-04-24 98 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()) 
相关问题