获取邮件附件到python文件对象

发布于 2021-01-29 18:31:06

我有一个电子邮件多部分邮件对象,我想将该电子邮件中的附件转换为python文件对象。这可能吗?如果有可能,我应该考虑使用Python中的哪种方法或类来执行此类任务?

关注者
0
被浏览
43
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我不太了解“电子邮件多部分邮件对象”的意思。您的意思是属于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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看