Skip to content
← 返回项目

开源 · Python · 2026 年 6 月

Outlook 每日邮件汇总

一个 Python 文件,读取当天的收件箱和已发送邮件,整理成每日 Excel 报告,想运行几次都不会重复计数。

公开仓库 · MIT 许可证

A row of envelopes above a Daily Log sheet of 17 columns, one per field the script writes. The envelopes an earlier run counted are dim, and the new one is bright, like today's row at the bottom of the sheet. The number of envelopes and rows is illustrative.

演示在你的浏览器里运行,用的是一个虚构星期三的虚构收件箱。它不连接 Outlook,你在这里的操作也不会离开本页。脚本本身需要 Windows、Microsoft Outlook 和 Python。

它做什么

脚本在 Windows 上通过 COM(借助 pywin32)连接 Microsoft Outlook,读取收件箱和已发送邮件里当天的邮件。它统计发出、收到和回复了多少封,并计算邮件的长度。它还给写信给你的人、你写信的对象和来信的域名排名,并统计一天里各个小时收发了多少邮件。

结果写进一个排好版的 Excel 工作簿 DailyEmailSummary.xlsx,用 openpyxl 生成。Daily Log 工作表每天一行,共 17 列。每天还有一张 Detail 工作表,列出排名、每小时的邮件量、附件数量和大小、大致的回复时间,以及主题里最常见的词。

想运行几次都可以

每封 Outlook 邮件都有一个 EntryID,重启之后也不会变。脚本把已经计过的 EntryID 和当天的原始统计一起存在 email_tracking.json 里。上午 10 点、下午 2 点、下午 5 点各运行一次,最后得到的仍然是覆盖全天的一行。

  1. 扫描

    在收件箱和已发送邮件里找出当天的邮件。

  2. 跳过

    EntryID 已经在跟踪文件里的邮件一律跳过。

  3. 合并

    把新邮件加进当天的累计统计。

  4. 重算

    用合并后的统计重新算出每一项指标。

  5. 保存

    先写跟踪文件,再更新当天那一行和 Detail 工作表。

怎么做的

语言
Python,单个文件
运行环境
装有 Outlook 的 Windows
输出
Excel 工作簿和 JSON
许可证
MIT
  • Python
  • pywin32
  • openpyxl
  • Excel

脚本用 Outlook 的 Restrict 筛选,按收到或发出的时间只取当天的邮件。筛选失败时,就退回到较慢的整夹扫描。只统计邮件本身,会议邀请等其他类型会被排除。

回复数取自 Outlook 在每封收到的邮件上记录的回复时间。回复时间把一封发出的邮件和同一会话里最早收到的那封配对,只计入一天以内的间隔。

双击一个批处理文件就能运行。第一次运行、创建工作簿时,脚本会打印出用 Windows 任务计划程序每天定时运行的步骤。

在虚构的一天里运行它

演示在你的浏览器里运行,用的是一个虚构星期三的虚构收件箱。它不连接 Outlook,你在这里的操作也不会离开本页。脚本本身需要 Windows、Microsoft Outlook 和 Python。

选一个时间,然后运行脚本。邮件会在一天里陆续到达,每次运行只统计新邮件。在同一时间再运行一次,就能看到它跳过所有已经计过的邮件。

合成收件箱

2026 年 3 月 4 日星期三(虚构)

在你的浏览器里运行

运行时间

时间只能往前走。想选更早的时间,请重新开始这一天。 已运行 0 次

  • 已计数
  • 已到达,尚未计数
  • 尚未到达

当天的邮件,按时间先后收件箱 0/20 · 已发送邮件 0/10

  • 07:58收IT Service DeskServer maintenance window tonight · 尚未到达
  • 08:12收Jordan LeeQuarterly report draft · 1 个附件 · 08:40 已回复 · 尚未到达
  • 08:30收Weekly DigestWeekly digest: data and analytics · 尚未到达
  • 08:40发收件人: Jordan LeeRE: Quarterly report draft · 尚未到达
  • 08:47收Sam PatelData request for the dashboard · 09:20 已回复 · 尚未到达
  • 09:05收Mei ChenTeam lunch on Friday · 09:15 已回复 · 尚未到达
  • 09:15发收件人: Mei Chen; Jordan LeeRE: Team lunch on Friday · 尚未到达
  • 09:20发收件人: Sam PatelRE: Data request for the dashboard · 1 个附件 · 尚未到达
  • 09:41收Finance TeamInvoice 4471 for March · 2 个附件 · 尚未到达
  • 10:20收Jordan LeeRE: Quarterly report draft · 11:05 已回复 · 尚未到达
  • 10:55收Chris WalkerTraining calendar for April · 1 个附件 · 尚未到达
  • 11:05发收件人: Jordan LeeRE: Quarterly report draft · 1 个附件 · 尚未到达
  • 11:30收Sam PatelRE: Data request for the dashboard · 1 个附件 · 12:10 已回复 · 尚未到达
  • 12:05收IT Service DeskPassword expiry reminder · 尚未到达
  • 12:10发收件人: Sam PatelRE: Data request for the dashboard · 尚未到达
  • 12:40收Priya NairSurvey results for review · 2 个附件 · 13:30 已回复 · 尚未到达
  • 13:15收Mei ChenRE: Team lunch on Friday · 尚未到达
  • 13:30发收件人: Priya Nair; Chris WalkerRE: Survey results for review · 尚未到达
  • 13:50收Jordan LeeDashboard figures for the board pack · 15:10 已回复 · 尚未到达
  • 14:25收Weekly DigestWebinar: data quality in practice · 尚未到达
  • 14:40发收件人: Finance TeamExpense claim for the conference · 1 个附件 · 尚未到达
  • 14:58收Finance TeamRE: Invoice 4471 for March · 尚未到达
  • 15:10发收件人: Jordan LeeRE: Dashboard figures for the board pack · 1 个附件 · 尚未到达
  • 15:30收Sam PatelData request: second extract · 1 个附件 · 16:05 已回复 · 尚未到达
  • 15:52收Chris WalkerRE: Training calendar for April · 尚未到达
  • 16:05发收件人: Sam PatelRE: Data request: second extract · 尚未到达
  • 16:20收Priya NairRE: Survey results for review · 16:45 已回复 · 尚未到达
  • 16:44收IT Service DeskMaintenance moved to Thursday · 尚未到达
  • 16:45发收件人: Priya NairRE: Survey results for review · 尚未到达
  • 16:58收Jordan LeeRE: Dashboard figures for the board pack · 尚未到达

控制台

还没有运行过。选一个时间,然后运行脚本。

工作簿 · DailyEmailSummary.xlsx

工作表名、列名和各节标题沿用脚本的英文输出。

第一次找到邮件的运行会创建 DailyEmailSummary.xlsx。

演示和脚本的不同

收件箱是虚构的。人名、团队、主题和时间都是编的,所有地址都以 .example 结尾。

每封虚构邮件的字数和大小都是固定值。脚本则是去掉 HTML 之后数正文的词数,大小从 Outlook 读取。

脚本的两条规则原样保留。回复状态在邮件第一次被计数时读取,所以那次运行之后才发出的回复不会再补算。回复时间只在同一次运行找到的邮件之间配对,所以对早先已计数邮件的回复不会得到回复时间。只在 17:00 运行一次,就能计入全部回复。

源码:GitHub 上的 rNLKJA/Outlook-Mail-Counting,MIT 许可证。演示是把脚本的计数规则移植到浏览器里,为本页编写。