在Python中解析多部分邮件并保存附件
我刚接触Python,想通过Python的imaplib和email库来解析Gmail里的邮件。这个过程进行得还不错,但我在处理邮件附件时遇到了一些问题。
我想从邮件中提取出所有的纯文本内容,同时忽略可能作为第二种内容类型插入的HTML部分,并且还想把其他所有的附件都保存下来。我尝试了以下方法:
...imaplib connection and mailbox selection...
typ, msg_data = c.fetch(num, '(RFC822)')
email_body = msg_data[0][1]
mail = email.message_from_string(email_body)
for part in mail.walk():
if part.get_content_type() == 'text/plain':
body = body + '\n' + part.get_payload()
else:
continue
这是我最初尝试提取邮件纯文本部分的代码,但当有人发送带有文本附件的邮件时,文本文件的内容会出现在上面提到的'body'变量中。
有人能告诉我怎么提取邮件的纯文本部分,同时忽略有时会出现的HTML内容,并且把所有其他类型的文件附件保存为文件吗?如果这段话不太清楚,我很抱歉。如果需要的话,我会更新问题以提供更多信息。
1 个回答
11
如果你只是想把文本附件从 body
变量中排除掉,按照你现在的代码,应该可以简单做到这一点:
mail = email.message_from_string(email_body)
for part in mail.walk():
c_type = part.get_content_type()
c_disp = part.get('Content-Disposition')
if c_type == 'text/plain' and c_disp == None:
body = body + '\n' + part.get_payload()
else:
continue
然后,如果内容的处理方式显示这是一个附件,你就可以使用 part.get_filename()
和 part.get_payload()
来处理这个文件。我不太确定这些内容是否会有所不同,但这基本上是我过去与邮件服务器交互时使用的方法。