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

如何使用Python提取Outlook中含指定主题关键词邮件的不同附件

Outlook附件提取代码优化方案

核心修改说明

  • 修复原代码未定义sub_folder的变量错误,调整文件夹路径取值逻辑
  • 将主题精确匹配改为关键词模糊匹配,预设匹配关键词列表,同时兼容大小写不同的写法,避免漏匹配
  • 新增输出目录自动创建逻辑,避免目录不存在导致的报错
  • 优化附件保存规则:仅保存符合格式要求的附件,不会强制给所有文件加.xlsx后缀避免文件损坏,同时自带序号解决重名覆盖问题
from win32com.client import Dispatch
import os

# 配置参数
KEYWORDS = ['report', 'weekly report', 'technical report'] # 主题需要包含的关键词
TARGET_FOLDER = 'Folder1' # 目标Outlook文件夹名
OUTPUT_DIR = r"C:\Users\Desktop\Attachments"
# 可按需指定要提取的附件后缀,设置为空列表则提取所有附件
ALLOWED_EXT = ['.xlsx', '.xls', '.csv'] 

# 初始化Outlook对象
outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
root_folder = outlook.Folders.Item(1)
T1_folder = root_folder.Folders[TARGET_FOLDER]
messages = T1_folder.Items

# 自动创建输出目录
os.makedirs(OUTPUT_DIR, exist_ok=True)
file_counter = 0

for m in messages:
    # 主题为空直接跳过
    if not m.Subject:
        continue
    # 转小写后匹配关键词,不区分大小写
    subject_lower = m.Subject.lower()
    # 只要匹配任意一个关键词就处理
    if any(keyword.lower() in subject_lower for keyword in KEYWORDS):
        # 可按需保留正文读取逻辑,不需要可以直接删除
        body_content = m.Body
        for attachment in m.Attachments:
            # 过滤指定后缀的附件,不需要过滤可以删除这部分判断
            file_ext = os.path.splitext(attachment.FileName)[-1].lower()
            if ALLOWED_EXT and file_ext not in ALLOWED_EXT:
                continue
            file_counter += 1
            # 生成不重名的文件名
            base_name, ext = os.path.splitext(attachment.FileName)
            save_name = f"{base_name}_{file_counter}{ext}"
            save_path = os.path.join(OUTPUT_DIR, save_name)
            attachment.SaveAsFile(save_path)

可选调整建议

  • 如果需要进一步缩小匹配范围,可以在关键词匹配的基础上增加正文内容匹配、附件文件名匹配的逻辑,只需要在if any(...)的判断条件中额外加对应规则即可
  • 如果邮件数量非常大,可以先给messages按接收时间排序,或者加时间范围过滤,减少不必要的遍历
  • 如果需要避免重复提取已经处理过的邮件,可以给处理过的邮件加标记,或者记录已处理邮件的EntryID存在本地文件里,下次运行直接跳过已处理项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:06:02