每个月报销最头疼的往往不是填表,而是找发票:打车、机票、酒店、餐饮的电子发票散落在 QQ 邮箱的各个角落,手动一封封打开、下载附件、解压 ZIP、再按类别归类,半小时起步,还容易漏。
WorkBuddy 的 invoice-download-expense-fill 技能,把这条手动流程整合为可重复执行的脚本:连上 QQ 邮箱 → 自动下载所有未读发票附件 → 自动提取金额日期 → 归类到桌面,直接拿去打印报销。
本文带你走完从链接 QQ 邮箱,到发票整理上桌面的完整流程。
1. 网页登录 QQ 邮箱(mail.qq.com)
2. 右上角「设置」→「账户」
3. 找到「POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务」
4. 开启 IMAP/SMTP 服务


开启服务时会要求短信验证,完成后点击「生成授权码」,得到一串 16 位字母。
注意:授权码 ≠ 你的 QQ 登录密码。它是专门给第三方邮件客户端使用的独立凭证,可以在邮箱里随时重置,即使泄露也不影响 QQ 账号登录。

脚本通过环境变量读取邮箱信息,不要把授权码硬编码进脚本文件:
环境变量名 | 含义 | 示例 |
|---|---|---|
QQ_EMAIL | 你的 QQ 邮箱 | 123456@qq.com |
QQ_AUTH_CODE | 上面生成的 16 位授权码 | abcd efgh ijkl mnop |
在 WorkBuddy 或系统的环境变量设置里填好这两个值即可,脚本运行时会自动读取,全程不暴露明文。
技能脚本位于:~/.workbuddy/skills/invoice-download-expense-fill/scripts/
python scripts/download_qq_email_invoices.py
脚本会:
• 通过 IMAP(imap.qq.com:993)连接 QQ 邮箱并登录
• 拉取所有未读邮件的附件
• 在桌面创建「报销发票」文件夹,每封邮件建独立子目录 邮件N_主题_日期
• 自动解压 .zip 附件
效果:桌面「报销发票 / 邮件1_滴滴出行电子发票及行程报销单」下就是这封邮件的全部附件。



python scripts/extract_invoice_data.py
扫描所有 PDF / CSV 发票,用正则提取金额、日期、城市对,输出到 报销发票/invoice_extracted.txt 供人工核对后填写报销明细。
依赖:需先 pip install pdfplumber。
基于模板脚本(如 fill_expense_6yue24.py)把提取的数据填入报销表对应位置(按费用类别横向写金额,机票明细写日期/出发/到达/金额)。新月份复制模板、改数据源即可。


从「打开邮箱」到「桌面打印文件夹就绪」,原来半小时的手工活,现在一条命令串起来十几分钟搞定。
1. 授权码不是密码:它是独立凭证,可在 QQ 邮箱随时重置;切勿与 QQ 登录密码混用或写死在脚本。
2. 只下载“未读”邮件:已读过的不会重复下载;如需重新下载,在 QQ 邮箱把邮件标为未读,或调整脚本里的 IMAP 搜索条件。
3. 凭证走环境变量:不要把授权码提交进任何代码仓库或记忆文件,用 QQ_EMAIL / QQ_AUTH_CODE 注入最安全。
4. 桌面文件谨慎操作:整理/删除请确认目录,个人目录属高风险区,避免批量误删。
把「链接 QQ 邮箱 → 下载未读发票 → 提取数据 → 填表 → 归类打印」这套报销流程沉淀成 WorkBuddy 技能后,每个月最烦的发票归集从手工半小时变成了命令行十几分钟。更重要的是,凭证用环境变量隔离、发票只在本地桌面流转,安全与效率兼得。
如果你也常被报销发票折磨,不妨照着上面的步骤把这套技能配起来——下个月报销日,你会感谢现在的自己。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。