gpt4 book ai didi

python - 确定 MIME 电子邮件部分是文件还是消息文本

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:37 25 4
gpt4 key购买 nike

作为一些电子邮件批处理的一部分,我们需要解码和清理消息。该过程的一个关键部分是将消息的邮件正文和邮件附件分开。最棘手的部分是确定何时将 Conent-Disposition: inline 部分视为消息正文替代项或文件。

到目前为止,这段代码似乎可以处理大多数情况:

from email import message_from_string

def split_parts(raw):
msg = message_from_string(raw)
bodies = []
files = []

for sub in msg.walk():
if sub.is_multipart():
continue
cd = sub.get("Content-Disposition", "")
if cd.startswith("attachment") or (cd.startswith("inline") and
sub.get_filename()):
files.append(sub)
else:
bodies.append(sub)

return bodies, files

请注意,内联部分依赖于在 header 中指定文件名,Outlook 似乎对其所有 multipart/related 消息都这样做。 Content-ID 也可以用作提示,但根据 RFC 2387它不是这样的指标。

因此,如果嵌入图像被编码为具有 Content-Disposition: inline 的消息部分,定义了 Content-ID 并且没有文件名,则上面的代码可能会错误地将其分类为消息体替代品。

从我从 RFC 中读到的内容来看,找到一个简单的检查的希望不大(特别是因为根据 RFC 编码在现实世界中几乎没有用,因为没有人这样做);但我想知道命中错误分类案例的可能性有多大。


理由

我可以有一组函数来处理每个 multipart/* 案例并让它们间接递归。但是,我们不太关心忠实的展示;事实上,我们通过 tidy 过滤所有 HTML 消息.相反,我们更感兴趣的是选择一种邮件正文替代方案并尽可能多地保存附件,即使它们是为了嵌入。

此外,由于用户拖动,某些用户代理在编写带有嵌入附件(例如 PDF 文件)的multipart/alternative 消息时会做一些非常奇怪的事情并将任意文件拖放到合成窗口中。

最佳答案

我不太了解你,但是,如果你想要正文,我会假设任何内容类型为 text/plain 或 text/html,具有内联内容配置,没有文件名或没有内容 ID,可能是 body 的一部分。

关于python - 确定 MIME 电子邮件部分是文件还是消息文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12682644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com