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

使用Python按指定主题规则过滤并保存Outlook邮件的实现问题

Outlook主题匹配筛选与邮件保存解决方案

你原有代码的匹配逻辑是筛选主题完全等于'Unaff'的邮件,要实现前缀、后缀、包含等模糊匹配规则,需要将匹配符改为LIKE并搭配通配符使用,具体调整方案如下:

1 三种常用主题匹配规则写法

Outlook的Restrict方法支持JET查询语法,使用%作为任意字符通配符:

  • 包含特定关键词:"[Subject] LIKE '%关键词%'"
  • 前缀匹配(主题以指定内容开头):"[Subject] LIKE '关键词%'"
  • 后缀匹配(主题以指定内容结尾):"[Subject] LIKE '%关键词'"
  • 多规则组合:用AND/OR拼接多个条件即可,例如筛选主题前缀为【通知】且包含"待办"的邮件:"[Subject] LIKE '【通知】%' AND [Subject] LIKE '%待办%'"

2 完整实现代码

以下代码包含筛选、非法字符处理、本地保存全流程:

import win32com.client
import os

# 初始化Outlook MAPI接口
outlook = win32com.client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
# 配置要筛选的邮箱和文件夹,中文Outlook对应名称为「已发送邮件」「收件箱」
inbox = outlook.Folders("abc@xyz.com").Folders("Sent Items")

# -------------------------- 自定义配置 --------------------------
# 筛选规则示例:主题前缀为【告警】且包含「服务器离线」关键词
filter_rule = "[Subject] LIKE '【告警】%' AND [Subject] LIKE '%服务器离线%'"
# 本地保存文件夹路径,不存在会自动创建
local_save_dir = r"C:\Users\你的用户名\Documents\Outlook筛选邮件"
os.makedirs(local_save_dir, exist_ok=True)
# ----------------------------------------------------------------

# 执行筛选
filtered_mails = inbox.Items.Restrict(filter_rule)
print(f"共匹配到{len(filtered_mails)}封符合条件的邮件")

# 遍历保存邮件
for mail in filtered_mails:
    # 处理主题中的非法字符,避免文件名报错
    safe_subject = "".join([c for c in mail.Subject if c not in r'\/:*?"<>|'])
    # 生成带时间戳的文件名,避免重名覆盖
    save_file = os.path.join(local_save_dir, f"{safe_subject}_{mail.ReceivedTime.strftime('%Y%m%d%H%M%S')}.msg")
    # 保存为msg格式,可根据需要修改为其他格式:olTXT(纯文本)、olHTML(网页)
    mail.SaveAs(save_file)
print("所有邮件保存完成")

3 注意事项

  • 文件夹名称必须和Outlook客户端显示的完全一致,中英文版本名称不同需要对应修改
  • LIKE匹配默认不区分大小写,符合大多数使用场景
  • 如果需要将邮件移动到Outlook内的其他文件夹而非本地保存,将SaveAs逻辑替换为Move方法即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:06:04