我有一个电子邮件多部分消息对象,我想将该电子邮件消息中的附件转换为 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
的输出。
关于python - 获取邮件附件到 python 文件对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4067937/