如何跳过处理电子邮件的附件(它是另一个emai的附件)

2024-10-04 03:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

使用jython

我有一个情况,电子邮件进来时有不同的附件。某些文件类型我处理其他我忽略和不写入文件。 我陷入了一个相当糟糕的境地,因为有时人们会以附件的形式发送电子邮件,而附加的电子邮件有合法的附件。在

我想做的是跳过附加的电子邮件及其所有附件。在

使用python/jythons std email lib如何做到这一点?在


让它更清楚

我需要解析一个电子邮件(名为根电子邮件),我想从这个电子邮件使用jython附件。 接下来支持某些附件,例如.pdf.doc等 现在正好是这样,客户发送一个电子邮件(根电子邮件)和另一个电子邮件(子电子邮件)作为附件,在子电子邮件中它有.pdf附件等等。在

我需要的是:去掉任何附加到根邮件和子邮件附件的子邮件。结果是我浏览了整个电子邮件,它只是解析每个附件,包括根附件和子附件,就好像它们是根附件一样。在

我不能要这个。我只对根附件是合法的ie.pdf.doc感兴趣。xls.rtf.tif.tiff文件

现在应该可以了,我得跑去赶公共汽车了! 谢谢!在


Tags: 文件附件docpdf电子邮件emaillib邮件
3条回答

那个名为“Here’s an example of how to unpack a MIME message like the one above, into a directory of files”的例子呢?看起来和你想要的很接近。在

import email
...
msg = email.message_from_file(fp)
...
for part in msg.walk():
    # multipart/* are just containers
    if part.get_content_maintype() == 'multipart':
        continue
    # Applications should really sanitize the given filename so that an
    # email message can't be used to overwrite important files
    filename = part.get_filename()
    if not filename:
        ext = mimetypes.guess_extension(part.get_content_type())
    ...

现有建议的问题是步行法。这种递归的深度优先遍历整个树,包括子树。在

查看walk方法的源代码,并对其进行调整以跳过递归部分。粗略的阅读可以看出:

if msg.is_multipart():
    for part in msg.get_payload():
          """ Process message, but do not recurse """
          filename = part.get_filename()

读取pydocs时,get_有效负载应该返回顶级消息的列表,而不是递归。在

您是否尝试过get_payload([i[,decode]])方法?与walk不同,它没有记录递归打开附件。在

相关问题 更多 >