You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Microsoft Graph获取的multipart/signed签名邮件附件中提取Excel文件

处理S/MIME签名邮件附件提取Excel的通用流程及Python工具

通用处理流程

  • 1. 解码附件原始内容
    从Microsoft Graph获取的附件content字段是Base64编码格式,先将其解码为二进制数据,可直接在内存中处理或保存为.p7m文件。
  • 2. 提取签名容器内的原始邮件
    .p7m是S/MIME签名后的容器文件,包含原始邮件(带附件)和签名信息。可选择先验证签名有效性(保障内容完整性),再提取出包裹在内的原始MIME格式邮件数据。
  • 3. 解析MIME邮件结构
    将提取到的原始MIME数据解析为邮件对象,遍历邮件的各个组成部分,筛选出类型为Excel的附件(常见类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet对应.xlsx,application/vnd.ms-excel对应.xls)。
  • 4. 保存Excel附件
    将目标Excel附件的内容解码(通常也是Base64格式),写入本地文件完成提取。

适用的Python包

  • pycryptodome:提供底层加密算法支持,可用于S/MIME签名验证与内容提取,需配合MIME解析工具使用。
  • email:Python标准库,专门用于解析MIME格式邮件,能便捷遍历邮件各部分、筛选目标附件。
  • smime:第三方S/MIME专用库,封装了解析、验证、内容提取的逻辑,使用更简洁高效。
  • base64:Python标准库,用于处理Base64编码和解码,是处理附件内容的基础工具。

简单代码示例

import smime
import email
import base64

# 替换为从Microsoft Graph获取的附件Base64内容
p7m_base64_content = "获取到的Base64字符串"
# 解码为二进制数据
p7m_binary = base64.b64decode(p7m_base64_content)

# 跳过签名验证,直接提取原始MIME邮件数据
raw_mime_data = smime.verify(p7m_binary, verify_signature=False)

# 解析MIME邮件
mail_msg = email.message_from_bytes(raw_mime_data)

# 遍历并提取Excel附件
for part in mail_msg.walk():
    if part.get_content_maintype() == 'application' and part.get_filename():
        file_name = part.get_filename()
        if file_name.lower().endswith(('.xlsx', '.xls')):
            excel_binary = part.get_payload(decode=True)
            with open(file_name, 'wb') as excel_file:
                excel_file.write(excel_binary)
            print(f"已成功提取Excel附件:{file_name}")

内容的提问来源于stack exchange,提问作者t3chb0t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:40:20