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

标签 python email

我有一个电子邮件多部分消息对象,我想将该电子邮件消息中的附件转换为 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/

相关文章:

python - 沿最后一个维度索引 numpy nd 数组

python - 使用 Python Scipy Minimize 优化运输成本流

java - 如何在 Java 中以编程方式处理 SMTPSendFailedException

bash - 没有互联网 - 电子邮件通知

php - 自动从数据库中删除退回的电子邮件地址?

c++ - 在 Cython 中用键盘中断 `while loop`

python - 如何压缩两个不同大小的列表?

python - NumPy 数组以 0 和 1 为界?

php - PHPMailer 中的 SMTP connect() 失败错误

java - 如何使用 javax.mail 库将 byte[] 转换为消息