我正在尝试编写一个脚本,将使用pdfkit将我的所有邮件(邮箱mbox格式)导出为PDF文件。
似乎我邮箱中的所有邮件都是多部分的,而我正在努力弄清楚哪部分是相关部分。如果我使用下面的代码遍历所有部分,我将通过电子邮件生成通常3到5个PDF,其中只有一个类似于我用电子邮件客户端打开电子邮件时所看到的。其他部分通常是原始文本或类似的内容:x92O&S\xd2\x0c\xb4e\xee\x0fh\xc68\x1
(十六进制?)。
我试图通过包含一个过滤HTML(if bool(BeautifulSoup(html, "html.parser").find())
)的测试来解决这个问题,但似乎这不起作用。
for part in message.walk():
partcounter +=1
try:
html = str(part.get_payload(decode=True))
if bool(BeautifulSoup(html, "html.parser").find()):
print(str(messagecounter)+'-'+str(partcounter)+' - '+"payload is HTML")
filename = 'C:/Email_forwarding/Attachments/'+str(messagecounter)+"-"+str(partcounter)+'.pdf'#this keeps the file only for the last part, which seems to be correct
pdfkit.from_string(html,filename, configuration=config)
print(str(messagecounter)+'-'+str(partcounter)+' - '+"created %s" %(filename))
else:
print(str(messagecounter)+'-'+str(partcounter)+' - '+"payload is not HTML")
except:
print(str(messagecounter)+'-'+str(partcounter)+' - '+"no payload or failed to convert")
如何检测多部分电子邮件的哪一部分包含实际的,可解释的HTML?
答案 0 :(得分:1)
您可以使用part.get_content_type()
来过滤邮件的不同部分:
for part in message.walk():
if part.get_content_type() == 'text/html':
html = str(part.get_payload(decode=True))