如何在没有html标签的情况下获取电子邮件的文本正文。
我已经尝试过以下代码来解析邮件,但我得到了整个部分 ' ------ = _ Part_2'作为身体的部分。
我的代码
import email
message = email.message_from_string(text)
print_payload(message)
def print_payload(message):
print('******')
if message.is_multipart():
for payload in message.get_payload():
print_payload(payload)
else:
print message.get_payload()
for part in message.walk():
if part.get_content_type():
body = str(part.get_payload())
print(body)
print('******')
实际电子邮件正文:
另一个测试邮件。
谢谢,
Munesh
原始电子邮件:
Return-Path: abc@mydomain.com Date: Mon, 18 Sep 2017 23:07:16 +0000 From: abc@mydomain.com To: xyz@mydomain.com Cc: abc@mydomain.com Message-ID: <1233.5.68566565@host.corp.mydomain.com> Subject: My email subject MIME-Version: 1.0 Content-Type: application/ms-tnef Content-Transfer-Encoding: binary X-MS-Exchange-Organization-SCL: -1 X-MS-Exchange-Organization-MessageDirectionality: Originating Thread-Topic: My email subject X-Forefront-Antispam-Report: SFV:SKI;SCL:-1; X-MS-PublicTrafficType: Email X-MS-Exchange-Organization-Antispam-Report: SFV:SKI;SCL:-1; Accept-Language: en-US Content-Language: en-US
------=_Part_2_123.456 Content-Type: text/html; charset=us-ascii Content-Transfer-Encoding: 7bit
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="Generator" content="Microsoft Word 14 (filtered medium)"><style><!-- /* Font Definitions */ @font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";} a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;} span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri","sans-serif";
color:windowtext;} .MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";} @page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;} div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml><o:shapedefaults v:ext="edit" spidmax="1026" /></xml><![endif]--><!--[if gte mso 9]><xml><o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="1" /></o:shapelayout></xml><![endif]--></head><body lang="EN-US" link="blue" vlink="purple"><div class="WordSection1"><p class="MsoNormal">Another test mail.<o:p></o:p></p><p class="MsoNormal"><o:p> </o:p></p><p class="MsoNormal">Thanks,<o:p></o:p></p><p class="MsoNormal">Munesh<o:p></o:p></p><p class="MsoNormal"><o:p> </o:p></p></div></body></html>
------=_Part_2_123.456--
提前致谢。
答案 0 :(得分:1)
使用BeautifulSoup库,解析文本实际上并不太难。如果您没有图书馆,请务必先pip install bs4
。在那之后,它不应该太难:
from bs4 import BeautifulSoup
def print_payload(message):
print('******')
if message.is_multipart():
for payload in message.get_payload():
print_payload(payload)
else:
print message.get_payload()
for part in message.walk():
if part.get_content_type():
body = str(part.get_payload())
soup = BeautifulSoup(body)
paragraphs = soup.find_all('p')
for paragraph in paragraphs:
print(paragraph.text)
print('******')
BeautifulSoup雄辩的是创建一个解析树,从中可以选择html元素。因此,如果您的电子邮件中包含其他html元素,您可能还必须搜索它们以获取所有数据。但是通过这个简单的电子邮件,找到所有带有标签的html元素&#39; p&#39;已经足够了。