使用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
相关产品推荐
相关产品推荐

