使用Python从邮件中下载附件和提取元数据

2023-05-16

在本篇博客中,我们将解析一段Python代码,该代码可以从电子邮件中下载附件并提取发送人、主题和日期等元数据。

这段代码包含两个函数:download_fileget_email_title。其中,download_file 函数用于将附件保存到指定路径;而 get_email_title 函数则用于提取发件人、主题和日期等信息。

download_file 函数

def download_file(msg):  
    fpath = os.getcwd()
    path_name = qq_email_rx.Subject  

    out_file = fpath + "\\" + path_name
    print('文件保存路径是:', out_file)
    doc_function.mkdir(out_file)  

    attachment_files = []
    for part in msg.walk():
        file_name = part.get_filename()  
        contentType = part.get_content_type() 
        mycode = part.get_content_charset() 
        if file_name:
            h = Header(file_name)
            dh = decode_header(h)  
            filename_download = dh[0][0]
            if dh[0][1]:
                filename_download = email_parse.decode_str(str(filename_download, dh[0][1])) 
            attachment_files.append(filename_download)
            data = part.get_payload(decode=True)  
            with open(out_file + "\\" + filename_download, 'wb') as f:  
                f.write(data)  

            qq_email_rx.filename = attachment_files
            src = out_file + "\\" + filename_download
            if qq_email_rx.filename[0].find(".mp3") != -1:  
                dst = out_file + "\\" + "mp3-" + qq_email_rx.Date + filename_download
                time.sleep(2)  
            elif qq_email_rx.filename[0].find(".jpg") != -1 or qq_email_rx.filename[0].find(".bmp") != -1 or \
                    qq_email_rx.filename[0].find(".png") != -1:  
                pic_name = doc_function.search_file("pic")
                if pic_name == None:
                    pic_num = 0
                else:
                    pic_num = len(pic_name)
                dst = out_file + "\\" + "pic" + str(pic_num) + "-" + qq_email_rx.Date + filename_download
                qq_email_tx.main_body = qq_email_tx.main_body + str(pic_num) + "-"
            else:  
                dst = out_file + "\\" + qq_email_rx.Date + filename_download

            try:
                os.rename(src, dst)
            except:  
                os.remove(dst)
                os.rename(src, dst)

            print(f'附件 {filename_download} 已下载及重命名完成')

        elif contentType == 'text/plain': 
            data = part.get_payload(decode=True)
            content = data.decode(mycode)
            qq_email_rx.main_body = content

download_file 函数首先获取当前工作目录,并以电子邮件的主题名称作为文件夹名称创建一个新的文件夹。该函数然后遍历电子邮件中的每一部分,使用 msg.walk() 方法检查是否包含任何附件。如果找到附件,则将其保存到之前创建的文件夹中,并使用 open() 函数重命名文件以包含日期和时间,并相应地更新全局变量 qq_email_rxqq_email_tx。如果电子邮件包含纯文本,则函数从中提取文本,并将其存储在 qq_email_rxmain_body 属性中。

get_email_title 函数

def get_email_title(msg):   
    for header in ['From', 'Subject', 'Date']:  
        value = msg.get(header, '')  
        if value != '':
            if header == 'From':  
                hdr, addr = parseaddr(value)
                name = email_parse.decode_str(hdr)  
                value = '%s <%s>' % (name, addr)
                qq_email_rx.From = name

            elif header == 'Subject':
                value = email_parse.decode_str(value) 
                if value.find("回复") != -1:  
                    qq_email_rx.Subject = value[3:]
                    print(qq_email_rx.Subject)
                else:
                    qq_email_rx.Subject = value

            elif header == 'Date':  
                value = email_parse.decode_str(value) 
                print(value)
                time_format = datetime.datetime.strptime(value, '%a, %d %b %Y %H:%M:%S +%f')
                qq_email_rx.Date = time_format.strftime("%Y-%m-%d %H-%M-%S-")
                print(qq_email_rx.Date)

            print('%s: %s' % (header, value))

get_email_title 函数从电子邮件头中提取发送人、主题和日期等信息。它使用 msg.get() 方法获取每个头字段的值,并使用 email_parse.decode_str() 函数对其进行解码。发送者的名称和电子邮件地址分别使用 parseaddr() 方法提取。检查主题行是否包含“回复”一词,如果包含,则将其后面的字符用作文件夹名称。最后,使用 datetime.datetime.strptime() 方法解析日期,并使用 strftime() 方法将其转换为标准格式,然后将其存储在 qq_email_rxDate 属性中。

这是一个有用的代码片段,可以在需要从电子邮件中提取附件和元数据时使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python从邮件中下载附件和提取元数据 的相关文章

随机推荐

  • 几种常见mybatis分页实现

    mybatis框架分页实现 xff0c 有几种方式 xff0c 最简单的就是利用原生的sql关键字limit来实现 xff0c 还有一种就是利用interceptor来拼接sql xff0c 实现和limit一样的功能 xff0c 再一个就
  • curl发送POST方法类型带body参数请求以及发送上传文件请求

    curl在实际中会被postman等替代 xff0c 但是他仍然是一个快速的模拟http请求的工具 xff0c 而且也有他不可替代的理由 xff0c 使用简单 xff0c 在命令行下就可以完成 今天不是介绍如何使用curl模拟各种GET P
  • 第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

    第45章 DCMI OV2640摄像头 全套 200 集视频教程和 1000 页 PDF 教程请到秉火论坛下载 xff1a www firebbs cn 野火视频教程优酷观看网址 xff1a http i youku com firege
  • 技术分享|探究群体智能—基于UWB定位技术的无人机集群协同

    随着无人机性能水平提高 xff0c 无人机在民用类和军事类活动中的使用越来越广泛 由于无人机飞行环境和任务难度不同 xff0c 单架无人机因为自身动力和负荷能力很难独自完成任务 xff0c 无人机集群协同作业则是当前科技现代化的任务要求 集
  • 技术分享 | 基于室外RTK/GPS定位系统下的无人机集群协同

    在自然界中 xff0c 为弥补个体能力的不足 xff0c 诸多生物种群能通过个体相互之间的交流与合作呈现出某种群体行为 xff0c 比如鱼群结群游弋 鸟群聚集迁徙以及蚂蚁协同搬运等 受此激励 xff0c 人们希望开发像鸟群 鱼群一样自由集结
  • STL学习系列之一——标准模板库STL介绍

    说明 xff1a 此文为连载版 xff0c 今天学习STL的介绍 1 STL介绍 标准模板库STL是当今每个从事C 43 43 编程的人需要掌握的技术 xff0c 所有很有必要总结下 本文将介绍STL并探讨它的三个主要概念 xff1a 容器
  • 如何在cmakelist中,find_package取指定路径中查找

    在开发中 xff0c 最常遇到环境问题 xff0c 这个opencv版本不对 xff0c 那个pcl版本不对 xff0c 如果将原系统目录下的库卸载后重装新的版本 xff0c 往往会出现一些意想不到的事 xff0c 费时费力 我常常这样做
  • MFC模型树控件TreeCtrl实现按下Ctrl键多选,按下Shift键连选

    MFC模型树控件TreeCtrl实现按下Ctrl键多选 xff0c 按下Shift键连选 MFC的List Box只需要将控件属性中的Selection项设置为Extended xff0c 即可实现Ctrl键多选和Shift键连选 xff1
  • PCL点云库——欧式聚类分割

    欧式聚类分割 pcl EuclideanClusterExtraction是基于欧式距离提取集群的方法 xff0c 仅依据距离 xff0c 将小于距离阈值的点云作为一个集群 具体的实现方法大致是 xff1a 1 找到空间中某点p10 xff
  • PCL点云库——旋转平移矩阵

    旋转平移矩阵 点云摆正 点云配准等点云操作实质上是对点云进行旋转平移 xff0c 使点云变换至目标位姿 PCL中使用的是矩阵乘列向量的计算方法 下面分别给出了点A x y z 绕X轴 Y轴 Z轴逆时针旋转角度 的示意图与旋转矩阵 xff08
  • PCL点云库——点云法线估计

    点云法线估计 PCL中的所有点云的法线都是指向视点的 xff0c 视点坐标默认为 0 0 0 xff0c 对视点进行设置 xff0c 则可对法线进行定向 如图1与图2所示 xff0c 分别为斯坦福兔子在视点坐标为 10 10 10 与 10
  • PCL点云库——PCA粗配准

    PCA粗配准 主成分分析法 Principal Component Analysis xff0c 简称PCA 是使数据简化的算法 xff0c 通过揭露数据内部的主要分布方向 xff0c 减少了数据集的维数 xff0c 从而保留了点云集中贡献
  • MFC按钮(Button)上的文字与图标显示

    MFC按钮 xff08 Button xff09 上的文字与图标显示 一 新建对话框 MFC中使用以下两种方法可以得到对话框 xff1a 1 1 使用如图1所示的方法 xff0c 新建一个基于对话框的应用程序 xff1b 1 2 在已有的项
  • 第44章 MPU6050传感器—姿态检测—零死角玩转STM32-F429系列

    第44章 MPU6050传感器 姿态检测 全套 200 集视频教程和 1000 页 PDF 教程请到秉火论坛下载 xff1a www firebbs cn 野火视频教程优酷观看网址 xff1a http i youku com firege
  • 通过哪些性能参数选择手持式激光扫描仪?

    选择手持式激光扫描仪 激光主动成像系统有诸多优点 xff0c 譬如抗干扰性强 xff0c 能很好地适应不同的测量现场 xff0c 但是它的图像会受到散斑噪声和其他一些高斯噪声的影响 如图1所示 xff0c 分别用红 蓝激光扫描点距0 1mm
  • 函数使用笔记——ShellExecute

    函数使用笔记 ShellExecute API函数 ShellExecute的功能是运行一个外部程序 xff08 或者是打开一个已注册的文件 打开一个目录 打印一个文件等等 xff09 xff0c 并对外部程序有一定的控制 有几个API函数
  • 使用Selenium和Chrome浏览器获取诗词网站搜索结果

    在进行信息检索时 xff0c 我们通常会使用搜索引擎来查找相关的文章 图片 音乐等资源 而在特定的领域中 xff0c 也有一些针对特定内容的搜索引擎或网站 xff0c 比如古诗文网 诗词库等 在本篇博客中 xff0c 我们将介绍如何使用Py
  • 使用Selenium和Chrome浏览器获取图片网站搜索结果

    在进行信息检索时 xff0c 我们通常会使用搜索引擎来查找相关的文章 图片 音乐等资源 而在特定的领域中 xff0c 也有一些针对特定内容的搜索引擎或网站 xff0c 比如百度图片 Pixabay等 在本篇博客中 xff0c 我们将介绍如何
  • 使用python定时抓取个人邮箱数据(通过邮件数量判断)

    在进行信息收集时 xff0c 我们通常会使用电子邮件来接收最新的消息 文档 数据等资源 而在特定场景下 xff0c 也有一些需要自动化获取和处理邮件数据的需求 在本篇博客中 xff0c 我们将介绍如何使用Python的imaplib库连接到
  • 使用Python从邮件中下载附件和提取元数据

    在本篇博客中 xff0c 我们将解析一段Python代码 xff0c 该代码可以从电子邮件中下载附件并提取发送人 主题和日期等元数据 这段代码包含两个函数 xff1a download file 和 get email title 其中 x