1

我使用get_payload()方法将有效负载作为字符串实例。但是我希望我的有效负载以一种可以逐字访问它的方式进行,我尝试了几种方法,例如as_string() method, flatten() method, get_charset() method,但每次都有一些问题。

我使用以下代码获得了有效载荷

import email
from email import *
f=open('mail.txt','r')
obj=email.parser.Parser()
fp=obj.parse(f)
payload=fp.get_payload()
4

2 回答 2

2

刚刚用我自己的几封原始电子邮件测试了你的片段。工作正常...

get_payload() 返回列表或字符串,因此您需要先检查

if isinstance(payload, list):
    for m in payload:
        print str(m).split()

else:
    print str(m).split()

编辑

根据我们的讨论,您的问题是您没有在 fp 对象上检查 is_multipart(),该对象实际上是一个消息实例。如果 fp.is_multipart() == True,则 get_payload() 将返回消息实例列表。在您的情况下,根据您的示例邮件消息,它不是多部分的,而 fp 实际上是您感兴趣的对象。

于 2011-12-18T18:19:43.030 回答
0

我将有效负载作为字符串获取,因为我的 fp 不是多部分 如果它可能是多部分,它将返回一个字符串列表,所以现在我可以使用以下代码

payload=fp.get_payload()
abc=payload.split(" ")

它给我的输出如下 ['good', 'day\nhttp://72.167.116.186/image/bdfedx.php?iqunin=3D41\n\n', '', '', '', '', '', '', '', '', '', '', '', 'Sun,', '18', 'Dec', '2011', '10:53:43\n_ _ __ _ __ _ __ _ __ _ __ _ \n“她”、“擦”、“他”、“干”、“用”、“软”、“法兰绒”、“和”、“给”、“他”、 'some', 'clean,', 'dry', 'clothes,=\n', 'and', 'made', 'him', 'very', 'comfortable', 'again', '(c )', '抒情诗', 'wa946758\n']

感谢jdi :) ps昨天无法将其作为答案发布,因为积分有一些限制

于 2011-12-19T21:14:00.427 回答