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

Python遍历Outlook多文件夹删除30天前旧邮件实现方法

Python实现Outlook多文件夹30天以上旧邮件批量删除

核心调整思路

原有代码仅硬编码了单个目标文件夹路径,无法批量处理多目录。调整时将单文件夹的筛选、删除逻辑抽为通用可复用逻辑,配合目标文件夹列表遍历即可实现多文件夹批量清理,同时修复原代码存在的冗余初始化、正序删除漏删等问题。

可直接运行的完整代码

import datetime as dt
import win32com.client as win32

# 初始化Outlook会话,移除原代码重复创建的冗余对象
outlook = win32.dynamic.Dispatch('Outlook.Application').GetNamespace('MAPI')
mail_root = outlook.Folders['sally_smith@gmail.com'].Folders['Inbox'].Folders['New']

# 配置项:在此处增删需要处理的目标文件夹名即可
target_folders = ['Clients', 'Reports']
# 配置项:邮件保留天数,当前设置为30天
retain_days = 30
cutoff_time = dt.datetime.now() - dt.timedelta(days=retain_days)
# 适配Outlook查询规则的时间格式
filter_str = "[ReceivedTime] < '" + cutoff_time.strftime('%d/%m/%Y') + "'"

for folder_name in target_folders:
    # 校验文件夹是否存在,避免单个文件夹不存在时整个任务中断
    if folder_name not in [f.Name for f in mail_root.Folders]:
        print(f"警告:未找到文件夹 {folder_name},跳过处理")
        continue
    current_folder = mail_root.Folders[folder_name]
    # 筛选符合删除条件的旧邮件
    to_delete_mails = current_folder.Items.Restrict(filter_str)
    # 倒序遍历删除,避免正序删除时集合索引偏移导致漏删
    for idx in range(to_delete_mails.Count, 0, -1):
        mail = to_delete_mails.Item(idx)
        mail.Delete()
    print(f"文件夹 {folder_name} 旧邮件清理完成")

关键修改说明

  • 清理原代码重复导入datetime、重复创建Outlook实例的冗余逻辑,执行效率更高
  • 所有可配置项(目标文件夹列表、邮件保留天数)统一放在代码开头,后续调整规则不需要改动核心处理逻辑
  • 新增文件夹存在性校验,单个文件夹路径异常不会中断整个清理任务
  • 修复原代码正序遍历删除邮件的索引偏移bug,不会出现漏删情况
  • 如果目标文件夹分布在不同父目录下,只需把每个文件夹的完整获取路径写入遍历列表,替换当前同根目录遍历逻辑即可适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:18:20