我有一个对象。
fp = open(self.currentEmailPath, "rb")
p = email.Parser.Parser()
self._currentEmailParsedInstance= p.parse(fp)
fp.close()
self.currentEmailParsedInstance,从这个对象我想得到一个电子邮件的正文,文本只有HTML ....
我该怎么做?
newmsg=self._currentEmailParsedInstance.get_payload()
body=newmsg[0].get_content....?
然后从身体剥离html。 那是什么......返回实际文本的方法......也许我误解了你
msg=self._currentEmailParsedInstance.get_payload()
print type(msg)
output = type'list'
电子邮件
回程路径:
收到:来自xx.xx.net(示例)的mxx3.xx.net(xxx)
id 485EF65F08EDX5E12,用于xxx@xx.com; 2008年10月23日星期四06:07:51 +0200
收到:来自xxxxx2(ccc)的example.net(ccc)(经过身份验证为xxxx.xxx@example.com)
id 48798D4001146189,例如example.example@example-example.com; 2008年10月23日星期四06:07:51 +0200
来自:“例子”
致:
主题:FW:例子
日期:2008年10月23日星期四12:07:45 +0800
组织:例子
消息ID:< 001601c934c4 $ xxxx30 $ a9ff460a @ xxx>
MIME版本:1.0
内容类型:multipart / mixed;
边界= “---- = _ NextPart_000_0017_01C93507.F6F64E30”
X-Mailer:Microsoft Office Outlook 11
X-MimeOLE:由Microsoft MimeOLE制作V6.00.2900.3138
线程索引:Ack0wLaumqgZo1oXSBuIpUCEg / wfOAABAFEA
这是MIME格式的多部分邮件。
------ = _ NextPart_000_0017_01C93507.F6F64E30
内容类型:multipart / alternative;
boundary =“---- = _ NextPart_001_0018_01C93507.F6F64E30”
------ = _ NextPart_001_0018_01C93507.F6F64E30
内容类型:text / plain;
字符集= “US-ASCII”
内容传输编码:7位
来自:example.example [mailto:example@example.com]
发送时间:2008年10月23日星期四上午11:37
致:xxxx@example.com
主题:S / I例如(B / L
编号:4357-0120-810.044)
请附上example.doc),
感谢。
B.rgds,
xxx xxx
------ = _ NextPart_001_0018_01C93507.F6F64E30
内容类型:text / html;
字符集= “US-ASCII”
Content-Transfer-Encoding:quoted-printable
xmlns:o = 3D“urn:schemas-microsoft-com:office:office”=
xmlns:w = 3D“urn:schemas-microsoft-com:office:word”=
xmlns:st1 = 3D“urn:schemas-microsoft-com:office:smarttags”=
的xmlns = 3D “http://www.w3.org/TR/REC-html40” >
HTML STUFF直到
------ = _ NextPart_001_0018_01C93507.F6F64E30--
------ = _ NextPart_000_0017_01C93507.F6F64E30
内容类型:application / msword;
NAME = “xxxx.doc”
内容传输编码:base64
内容 - 处置:附件;
filename =“xxxx.doc”
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7 / CQAGAAAAAAAAAAAAAAABAAAAYAAAAAAAAAAA EAAAYgAAAAEAAAD + //// AAAAAF8AAAD //////////////////////////////////////////// / ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// ////////////////////////// ////////////////////////////////////////////////// /////////////////////////小号 pcEAI2AJBAAA + FK / AAAAAAAAEAAAAAAABgAAnEIAAA4AYmpiaqEVoRUAAAAAAAAAAAAAAAAAAAAA AAAECBYAMlAAAMN / AADDfwAAQQ4AAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD // w8AAAAA AAAAAAD // // w8AAAAAAAAAAAD w8AAAAAAAAAAAAAAAAAAAAAAKQAAAAAAEYEAAAAAAAARgQAAEYE AAAAAAAARgQAAAAAAABGBAAAAAAAAEYEAAAAAAAARgQAABQAAAAAAAAAAAAAAFoEAAAAAAAA4hsA AAAAAADiGwAAAAAAAOIbAAA4AAAAGhwAAHwAAACWHAAARAAAAFoEAAAAAAAABzcAAEgBAADmHAAA FgAAAPwcAAAAAAAA / BwAAAAAAAD8HAAAAAAAAPwcAAAAAAAA / BwAAAAAAAD8HAAAAAAAAPwcAAAA AAAAMjYAAAIAAAA0NgAAAAAAADQ2AAAAAAAANDYAAAAAAAA0NgAAAAAAADQ2AAAAAAAANDYAACQA AABPOAAAaAIAALc6AACOAAAAWDYAAGkAAAAAAAAAAAAAAAAAAAAAAAAARgQAAAAAAABHLAAAAAAA AAAAAAAAAAAAAAAAAAAAAAD8HAAAAAAAAPwcAAAAAAAARywAAAAAAABHLAAAAAAAAFg2AAAAAAAA
------ = _ NextPart_000_0017_01C93507.F6F64E30--
我只想得到:
来自:xxxx.xxxx [mailto:xxxx@example.com]
发送时间:2008年10月23日星期四上午11:37
致:xxxx@example.com
主题:xxxxx的S / I(B / L
编号:4357-0120-810.044)
请找到附加的xxxx.doc),
感谢。
B.rgds,
xxx xxx
不确定邮件是否格式错误! 似乎你得到一个html页面,你必须这样做:
parts=self._currentEmailParsedInstance.get_payload()
print parts[0].get_content_type()
..._multipart/alternative_
textParts=parts[0].get_payload()
print textParts[0].get_content_type()
..._text/plain_
body=textParts[0].get_payload()
print body
...get the text without a problem!!
非常感谢Vinko。
所以它有点像处理xml,本质上是递归的。
答案 0 :(得分:4)
这将为您提供消息的内容
self.currentEmailParsedInstance.get_payload()
至于仅文本部分,您必须自己剥离HTML,例如使用BeautifulSoup。
检查this link以获取有关Parser返回的Message类的更多信息。如果您的意思是获取包含HTML和纯文本版本的消息的文本部分,您可以指定get_payload()的索引来获取所需的部分。
我尝试使用不同的MIME电子邮件,因为您粘贴的内容似乎格式不正确,希望您在编辑时出现格式错误。
>>> parser = email.parser.Parser()
>>> message = parser.parse(open('/home/vinko/jlm.txt','r'))
>>> message.is_multipart()
True
>>> parts = message.get_payload()
>>> len(parts)
2
>>> parts[0].get_content_type()
'text/plain'
>>> parts[1].get_content_type()
'message/rfc822'
>>> parts[0].get_payload()
'Message Text'
部分将包含多部分消息的所有部分,您可以检查其内容类型如图所示,并仅获取文本/普通部分。
祝你好运。答案 1 :(得分:0)
最终得到了这个
parser = email.parser.Parser()
self._email = parser.parse(open('/home/vinko/jlm.txt','r'))
parts=self._email.get_payload()
check=parts[0].get_content_type()
if check == "text/plain":
return parts[0].get_payload()
elif check == "multipart/alternative":
part=parts[0].get_payload()
if part[0].get_content_type() == "text/plain":
return part[0].get_payload()
else:
return "cannot obtain the body of the email"
else:
return "cannot obtain the body of the email"