当前位置: 首页 > 知识库问答 >
问题:

如何解析eml文件并提取元数据信息

齐坚成
2023-03-14
import email
from email import policy
from email.parser import BytesParser
import glob
file_list = glob.glob('*.eml') # returns list of files
with open(file_list[2], 'rb') as fp:  # select a specific email file from the list
    msg = BytesParser(policy=policy.default).parse(fp)
text = msg.get_body(preferencelist=('plain')).get_content()
print(text)
import email
from emaildata.metadata import MetaData

message = email.message_from_file(open('message.eml'))
extractor = MetaData(message)
data = extractor.to_dict()
print data.keys()
import email
from emaildata.attachment import Attachment

message = email.message_from_file(open('message.eml'))
for content, filename, mimetype, message in Attachment.extract(message):
    print filename
    with open(filename, 'w') as stream:
        stream.write(content)
    # If message is not None then it is an instance of email.message.Message
    if message:
        print "The file {0} is a message with attachments.".format(filename)

共有1个答案

邵畅
2023-03-14

在Python 3.x中,可以使用下面的代码访问元数据信息

from email import policy
from email.parser import BytesParser
with open(eml_file, 'rb') as fp:
    msg = BytesParser(policy=policy.default).parse(fp)

print('To:', msg['to'])
print('From:', msg['from'])
print('Subject:', msg['subject'])

其余头信息可以使用msg.keys()访问

要从eml文件下载附件,可以使用以下代码:

import sys
import os
import os.path
from collections import defaultdict
from email.parser import Parser

eml_mail = 'your eml file'
output_dir = 'mention the directory where you want the files to be download'

def parse_message(filename):
    with open(filename) as f:
        return Parser().parse(f)

def find_attachments(message):
    """
    Return a tuple of parsed content-disposition dict, message object
    for each attachment found.
    """
    found = []
    for part in message.walk():
        if 'content-disposition' not in part:
            continue
        cdisp = part['content-disposition'].split(';')
        cdisp = [x.strip() for x in cdisp]
        if cdisp[0].lower() != 'attachment':
            continue
        parsed = {}
        for kv in cdisp[1:]:
            key, val = kv.split('=')
            if val.startswith('"'):
                val = val.strip('"')
            elif val.startswith("'"):
                val = val.strip("'")
            parsed[key] = val
        found.append((parsed, part))
    return found

def run(eml_filename, output_dir):
    msg = parse_message(eml_filename)
    attachments = find_attachments(msg)
    print ("Found {0} attachments...".format(len(attachments)))
    if not os.path.isdir(output_dir):
        os.mkdir(output_dir)
    for cdisp, part in attachments:
        cdisp_filename = os.path.normpath(cdisp['filename'])
        # prevent malicious crap
        if os.path.isabs(cdisp_filename):
            cdisp_filename = os.path.basename(cdisp_filename)
        towrite = os.path.join(output_dir, cdisp_filename)
        print( "Writing " + towrite)
        with open(towrite, 'wb') as fp:
            data = part.get_payload(decode=True)
            fp.write(data)


run(eml_mail, output_dir)
 类似资料:
  • 本文向大家介绍python解析html提取数据,并生成word文档实例解析,包括了python解析html提取数据,并生成word文档实例解析的使用技巧和注意事项,需要的朋友参考一下 简介 今天试着用ptyhon做了一个抓取网页内容,并生成word文档的功能,功能很简单,做一下记录以备以后用到。 生成word用到了第三方组件python-docx,所以先进行第三方组件的安装。由于windows下安

  • 我们需要解析.eml文件并显示包含所有内联图像以及网页上所有附件的完整电子邮件。我能够使用MimeKIT for.NET提取HTML正文。然而,我们不明白,我们可以按照什么顺序区分内联图像和普通电子邮件附件,并呈现这一切。有没有图书馆可以这样做?

  • 关于元数据 元数据是一组有关文件的标准化信息,如作者姓名、分辨率、色彩空间、版权以及为其应用的关键字。例如,大多数数码相机将一些基本信息附加到图像文件中,如高度、宽度、文件格式以及图像的拍摄时间。您可以使用元数据来优化工作流程以及组织文件。 关于 XMP 标准元数据信息是使用可扩展元数据平台 (XMP) 标准进行存储的, Adobe Bridge、 Adobe Illustrator、 Adobe

  • 我正在做一个项目,我需要读取和解析视频元数据(持续时间、创建日期、标题、比特率……)据我所知,Python 3.x没有任何好的包来解决这个问题。 1--我发现了这些: 酶 HACHOIR-元数据 但它们是为python 2.x设计的 python 3.4 windows 10

  • 我想验证一个数字签名的PDF,并获得类似于PHP7.4中AdobeAcrobat的信息。 我通过读取PDF文件中ByteRange中定义的字节并将其存储在变量中,从而获得PDF的签名 然后我将其转换为:

  • 问题内容: 我正在尝试从清单文件中提取信息以在文件中的一种方法中显示,但是似乎存在一些问题。任何帮助表示赞赏。 清单文件: myClass.java: 输出: 那有什么呢?看起来pkg对象已正确定义,但是它不读取任何Specification或Implementation属性。 问题答案: 所以我终于弄清楚了,以为我愿意和别人分享我的头,以防其他人像我那样把头撞在那堵砖墙上。我再也无法让类中的方法