获取邮件附件到python文件对象
我有一个电子邮件多部分邮件对象,我想将该电子邮件中的附件转换为python文件对象。这可能吗?如果有可能,我应该考虑使用Python中的哪种方法或类来执行此类任务?
-
我不太了解“电子邮件多部分邮件对象”的意思。您的意思是属于
email.message.Message
该类的对象吗?如果这就是您的意思,那很简单。在多部分消息上,该
get_payload
方法返回消息部分的列表(每个消息部分本身都是Message
对象)。您可以遍历这些部分并检查它们的属性:例如,该get_content_type
方法返回该部分的MIME类型,该get_filename
方法返回该部分的文件名(如果消息中指定了任何文件名)。然后,当您找到正确的消息部分时,您可以调用get_payload(decode=True)
以获取解码后的内容。>>> import email >>> msg = email.message_from_file(open('message.txt')) >>> len(msg.get_payload()) 2 >>> attachment = msg.get_payload()[1] >>> attachment.get_content_type() 'image/png' >>> open('attachment.png', 'wb').write(attachment.get_payload(decode=True))
如果要以编程方式从收到的电子邮件中提取附件,则可能要采取预防措施来防范病毒和特洛伊木马。特别是,您可能只应提取其MIME类型是安全的附件,并且可能要选择自己的文件名,或者至少要清理的输出
get_filename
。