从电子邮件中删除(不清楚)附件

问题描述 投票:0回答:1

Python 3.6

我正在尝试存档一些旧邮件,并且我想删除其中一些邮件的附件。

但是,如果我使用

clear()
方法,MIME 部分仍保留在邮件中,只是空的(因此假定其类型为
text/plain
)。我想出了一个非常老套的解决方案,将
EmailMessage
对象转换为文本,然后删除任何后面没有标题的边界线,但肯定有更好的方法。

包含两个 .png 内联附件和两个 .txt 附件的示例邮件。

这是一个示例:

from email import policy
from email.parser import BytesParser
from email.iterators import _structure

with open(eml_path, 'rb') as fp:
    msg = BytesParser(policy=policy.SMTP).parse(fp)

print(_structure(msg))

for part in msg.walk():
     cd = part.get_content_disposition()
     if cd is not None:
        part.clear()

print(_structure(msg))

原邮件结构:

multipart/mixed
    multipart/alternative
        text/plain
        multipart/related
            text/html
            image/png
            image/png
    text/plain
    text/plain

去除附件后的结构:

multipart/mixed
    multipart/alternative
        text/plain
        multipart/related
            text/html
            text/plain
            text/plain
    text/plain
    text/plain

最后4部分是空的,但我想把它们删除。

根据我的尝试,这会导致 Thunderbird 和 Gmail 中出现一些图形问题。一旦我删除了挥之不去的边界线,它们就会正确显示。

python email mime
1个回答
0
投票

我认为你需要调用

set_payload()
来修改结构:

if msg.is_multipart():
    payload = msg.get_payload()
    payload = [
        part for part in payload
        if part.get_content_disposition() is None]
    msg.set_payload(payload)
© www.soinside.com 2019 - 2024. All rights reserved.