python提取邮件的附件,以excel为例

2023-11-14

配置邮箱、读取基本的邮件内容请参考:python读取并解析邮箱邮件,读取邮件主题、内容、时间

以excel为例:

  1. 获取邮件:
	email_value_config = {
		'imap_server': 'imap.exmail.qq.com', 
		'username': 'xxxx@xxxx.com', 
		'password': 'xxxxx', 
	}
    
    # 连接到邮箱服务器
   	email_server = imaplib.IMAP4_SSL(email_value_config['imap_server']) # 这样就已经链接到目标邮箱了
	email_server.login(email_value_config["username"], email_value_config['password']) # 这里登录
  	email_server.select('INBOX')
  1. 提取数据需要使用:
	part.get_payload(decode=True)
  1. 写入本地文件时,使用:
	file_name = str(email.header.make_header(email.header.decode_header(part.get_filename()))) 
	# 直接解析文件名,文件名会是balabala.xlsx
	
	with open(file_name, "wb") as save_file:
		save_file.write(part.get_payload(decode=True))

示例代码

import imaplib
import email
from loguru import logger


def parse_body(message):
    """解析邮件/信体"""
    for part in message.walk():
        if not part.is_multipart():  # 这里要判断是否是multipart,用来判断附件是一个message列表
            file_name = part.get_filename()  # 附件需要有文件名
            if file_name:
                file_name = str(email.header.make_header(email.header.decode_header(part.get_filename()))) # 直接解析文件名,如果是excel,会在文件名中以.xlsx或.xls为后缀
                if not ((".xls" in file_name) or (".xlsx" in file_name)):  # 根据后缀判断附件是一个excel
                    continue
                logger.debug(f"准备保存文件 {file_name}")
                with open(file_name, "wb") as save_file: # 这里就是写入文件了
                    save_file.write(part.get_payload(decode=True))
                logger.success(f"保存excel完成 {file_name}")


def main():
	email_value_config = {
		'imap_server': 'imap.exmail.qq.com', 
		'username': 'xxxx@xxxx.com', 
		'password': 'xxxxx', 
	}
    
    # 连接到邮箱服务器
   	email_server = imaplib.IMAP4_SSL(email_value_config['imap_server']) # 这样就已经链接到目标邮箱了
	email_server.login(email_value_config["username"], email_value_config['password']) # 这里登录
  	email_server.select('INBOX')
    
    # 选择收件箱
    _typ, _search_data = email_server.search(None, 'ALL')
    
    # 开始解析
    mailidlist = _search_data[0].split()  # 转成标准列表,获得所有邮件的ID
    print(f'一共解析邮件数量:{len(mailidlist)}')
    
    # 解析内容
    for mail_id in mailidlist:
        result, data = email_server.fetch(mail_id, '(RFC822)')  # 通过邮件id获取邮件
        email_info = email.message_from_bytes(data[0][1])  # 邮件内容(未解析)
        parse_body(email_info)

    email_server.close()
    email_server.logout()


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

python提取邮件的附件,以excel为例 的相关文章

  • 顶级棉花糖模式验证

    From 棉花糖 validation http marshmallow readthedocs org en latest quickstart html validation 我知道我可以在架构中的特定字段上注册验证器 如果验证器失败
  • SQL查询从表的每条记录生成多条记录

    我有一个包含 3000 条记录的表 使用其中的每一条记录 我必须生成大约 200 条记录 总共 600k 条记录 并通过 SQL Server 2012 将它们插入到第二个表中 我尝试使用 VBA 执行此操作 从第一个表中选择数据 计算 然
  • 是否可以在 Sphinx 中隐藏 Python 函数参数?

    假设我有以下函数 该函数记录在Numpydoc 风格 https github com numpy numpy blob master doc HOWTO DOCUMENT rst txt 并且文档是自动生成的Sphinx http sph
  • Excel VBA - 以编程方式列出用户窗体上控件的可用事件过程

    你好 我已经搜索过 google 但发现只有 1 页提到了如何在 MS Access 中执行此操作 但没有在 MS Excel 中执行此操作 此处 列出 MS Access 表单的控件及其事件 https stackoverflow com
  • 从 Excel 将参数传递到 SQL Server 上的 MS Query 中的临时变量

    我已经使用 Microsoft 查询创建了参数查询 如上所述here https superuser com questions 197453 run an sql query with a parameter from excel 200
  • [python]没有属性“TessBaseAPI”

    当我编译代码时出现错误 import tessercat api tesseract TessBaseAPI 错误是 AttributeError 模块 对象没有属性 TessBaseAPI 我已经安装了tesseract via pip
  • SQLAlchemy:检查给定值是否在列表中

    问题 在 PostgreSQL 中 检查某个字段是否在给定列表中是使用IN操作员 SELECT FROM stars WHERE star type IN Nova Planet SQLAlchemy 的等价物是什么INSQL查询 我尝试过
  • 导入错误:没有名为“wordcloud”的模块

    我正在努力将 wordcloud 安装到我的环境中 这是我正在运行的代码 import os import matplotlib pyplot as plt from wordcloud import WordCloud 我收到以下错误 I
  • __getitem__、__setitem__ 如何处理切片?

    我正在运行 Python 2 7 10 我需要拦截列表中的更改 我所说的 更改 是指在浅层意义上修改列表的任何内容 如果列表由相同顺序的相同对象组成 则列表不会更改 无论这些对象的状态如何 否则 它会更改 我不需要找出来how列表已经改变
  • 使用Python进行图像识别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个想法 就是我想识别图像中的字母 可能是 bmp或 jpg 例如 这是一个包含字母 S 的 bmp 图像 我想做的是使用Pyth
  • 来自数据框 groupby 的条形图

    import pandas as pd import numpy as np import matplotlib pyplot as plt df pd read csv arrests csv df df replace np nan 0
  • 什么时候用==,什么时候用is?

    奇怪的是 gt gt gt a 123 gt gt gt b 123 gt gt gt a is b True gt gt gt a 123 gt gt gt b 123 gt gt gt a is b False Seems a is b
  • 如何将一串Python代码编译成一个可以调用函数的模块?

    在 Python 中 我有一串 Python 源代码 其中包含以下函数 mySrc def foo print foo def bar print bar 我想将这个字符串编译成某种形式类似模块的对象这样我就可以调用代码中包含的函数 这是我
  • 获取 HTML 代码的结构

    我正在使用 BeautifulSoup4 我很好奇是否有一个函数可以返回 HTML 代码的结构 有序标签 这是一个例子 h1 Simple example h1 p This is a simple example of html page
  • PyPI 上的轮子平台约束有什么限制吗?

    是否有任何地方 PEP 或其他地方 声明关于 Linux 轮子上传范围的限制 PyPI http pypi io 应该有 具体来说 上传是否被认为是可接受的做法linux x86 64轮子到 PyPI 而不是manylinux1 x86 6
  • 调用 UDF 时公式中使用的值的数据类型错误

    我一直在努力找出这里出了什么问题 我有两个包含字符串值的列 我使用第三列调用工作表中的 UDF 但最终得到 Value 并出现错误 公式中使用的值的数据类型错误 Eg Col I Col J File1 Y File1 N File2 Y
  • Python:使用for循环更改变量后缀

    我知道这个问题被问了很多 但到目前为止我无法使用 理解答案 我想改变for循环中变量的后缀 我尝试了 stackoverflow 搜索提供的所有答案 但很难理解提问者经常提出的具体代码 因此 为了清楚起见 我使用一个简单的示例 这并不意味着
  • Docker Build 找不到 pip

    尝试关注一些 1 https aws amazon com blogs aws run docker apps locally using the elastic beanstalk eb cli 2 http docs aws amazo
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 使用 Python 进行 Google 搜索网页抓取 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近为了工作中的一些项目 学习了很多python 目前我需要使用谷歌搜索结果进行一些网络抓取 我发现几

随机推荐

  • Linux搭建测试环境详细步骤

    本文讲解如何在Linux CentOS下部署Java Web项目的步骤 环境准备 1 Linux系统 2 JDK 3 Tomcat 4 MySQL 工具下载 可从官网下载 已把安装工具存于百度网盘 链接 https pan baidu co
  • Jmeter:使用代理录制脚本

    目录 前言 介绍下各设置项 前言 当我们想要录制并回放特定应用程序或网站的交互时 使用JMeter的代理是一种常见且有效的方法 通过配置JMeter代理 它可以拦截并记录客户端与目标应用程序之间的HTTP或HTTPS通信 然后生成对应的测试
  • 如何重装Linux系统

    大家都知道我们平常所用的windows系统 可以很方便的重装系统 有U盘安装 还有光盘安装 那么我们在Linux下如何重装系统呢 其实和Windows下方法大同小异 如果你手上正好有个U盘的话 那就可以试试做一个USB Linux启动盘 它
  • javaee springMVC Map ModelMap ModelAndView el和jstl的使用

    pom依赖
  • ELK Stack 日志平台性能优化实践

    性能分析 服务器硬件Linux 1cpu4GRAM 假设每条日志250Byte 分析 logstash Linux 1cpu 4GRAM 每秒500条日志 去掉ruby每秒660条日志 去掉grok后每秒1000条数据 filebeat L
  • EduCoder_web实训作业--CSS从入门到精通——文本与字体样式

    大家注意了 由于这次好多代码都是分开的 为了方便我把每一关所有代码都发出来了 只要全选粘贴复制就可以了 第二关和第三关的答题区域都是最后一个文件夹 第一关 body 背景渐变 background webkit linear gradien
  • 50岁贷款投资的人,到底经历了什么?

    虽说 成功的投资者大多是孤独的 但是 在学习成长的过程中 参与交流讨论的好处还是很大的 一方面三人行必有我师 一方面通过他人的经验教训 深化自己的思考 前两天 看到这样一个提问 我的中国银行信用卡可以贷款2 6利率 三年还清 共贷15万 我
  • Python 模块 ddt 数据驱动测试

    简介 ddt 提供了一种方便的方法来实现数据驱动测试 Data Driven Testing 数据驱动测试是一种测试方法 通过将测试数据与测试逻辑分开 可以使用不同的数据集来运行相同的测试用例 这样可以提高测试的灵活性和可维护性 减少代码的
  • 为什么说快速排序是性能最好的排序算法?

    刚刚学习了排序这一章 看到了书中最后的一个总结表 心想从表上来看 堆排序不该是最好的排序算法么 不管最好 最坏还是平均情况 时间复杂度都是O nlogn 而且还不像快排和归并排序那样占空间 为什么说快速排序是最好的算法呢 其实经过实验 会发
  • 手把手带你利用苹果手机使用美区礼品卡升级ChatGPT Plus,轻松搞定!

    大家好 我是五竹 昨天用苹果手机尝试了一下 借助App Store 苹果应用商店 升级 Plus 成功了 一共升级了三个号 有两个一气呵成 轻松搞定 最后一个可能触发风控了 但第一时间反馈给了苹果客服 5分钟不到就解决了 不得不说别人家的客
  • 下载Visio2013镜像路径以及安装Visio2013软件

    下载Visio2013镜像路径以及安装Visio2013软件 下载镜像安装路径 https exmail qq com cgi bin ftnExs download k 5736333137c49bbd8e5ddf1c106407561d
  • Java进阶知识点5:服务端高并发的基石 - NIO与Reactor模式以及AIO与Proactor模式

    一 背景 要提升服务器的并发处理能力 通常有两大方向的思路 1 系统架构层面 比如负载均衡 多级缓存 单元化部署等等 2 单节点优化层面 比如修复代码级别的性能Bug JVM参数调优 IO优化等等 一般来说 系统架构的合理程度 决定了系统在
  • 在QGIS下开发python插件

    本文来自CSDN博客 转载请标明出处 http blog csdn net xiluoduyu 出于研究sextante代码的需要 抽空查了下QGIS下python插件的开发流程 具体的操作参考英文的PyQGIS 的开发帮助文档 QGIS是
  • 生成时间段内每一天

    String bigtimeStr 2019 07 01 String endtimeStr 2019 08 01 SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd Date bigt
  • 使用sleuth实现微服务跟踪

    在微服务架构中 众多的微服务之间互相调用 如何清晰地记录服务的调用链路是一个需要解决的问题 同时 由于各种原因 跨进程的服务调用失败时 运维人员希望能够通过查看日志和查看服务之间的调用关系来定位问题 而Spring cloud sleuth
  • aix卷组故障维护

    author skatetime 2009 04 24 故障描述 4 20日早晨 发现日报没有正常发送 登录数据库备机查看原因 查看系统的log命令 errpt more 没有发现什么异常 不过发现有如下错误 F3931284 041005
  • 《动手学深度学习》(七) -- 边界框和锚框

    1 边界框 在目标检测中 我们通常使用边界框 bounding box 来描述对象的空间位置 边界框是矩形的 由矩形左上角的以及右下角的 x x x和 y y y坐标决定 另一种常用的边界框表示方法是边界框中心的
  • 在js中 String 转json

    第一种方式 使用js函数eval testJson eval testJson 是错误的转换方式 正确的转换方式需要加 testJson eval testJson eval 的速度非常快 但是他可以编译以及执行任何JavaScript程序
  • 人脸识别技术也被应用到了移动支付领域

    随着智能手机及互联网的发展 移动支付已经成为了目前我国增速最快的支付方式 在移动支付发展过程中 各种新型的支付方式层出不穷 如二维码支付 NFC支付等 近年来 伴随着人工智能 机器学习及传感器的逐步发展 生物识别技术也被应用到了移动支付领域
  • python提取邮件的附件,以excel为例

    配置邮箱 读取基本的邮件内容请参考 python读取并解析邮箱邮件 读取邮件主题 内容 时间 以excel为例 获取邮件 email value config imap server imap exmail qq com username