按日期自动从投稿邮箱(IMAP)拉取收件箱中的投稿邮件及其附件(画作图片),提取作者、作品名、工作单位、联系电话等信息,按投稿人归并去重,一键生成 Excel 统计表与 PDF 作品集并归集到桌面。
每日投稿邮箱统计(公用版)是一项面向实际任务的技能,主要用于当用户说「统计昨天/某天的邮箱」「每日收稿统计」「投稿汇总」「邮件附件统计」时,用本技能;流程已端到端跑通并固化所有坑点;
AI :运行 node scripts/run.。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
当用户说「统计昨天/某天的邮箱」「每日收稿统计」「投稿汇总」「邮件附件统计」时,用本技能。流程已端到端跑通并固化所有坑点。本版自包含、无硬编码路径/账号,任何人导入填自己的邮箱即可用。
用户:「帮我统计昨天邮箱收到的投稿」 / 「收稿汇总」 / 「邮件附件统计一下」
AI:运行 node scripts/run.mjs <日期>(缺省=今天)→ 自动下载邮件附件 → 提取作者/作品/单位/电话 → 生成 Excel(4 表) + PDF(含历史回顾与图片预览) → 全套放到桌面 ~/Desktop/邮件附件/YYYY-MM-DD/。最后告诉你文件在哪、Excel 叫什么、PDF 叫什么。
用户:「看看 2026-07-15 那天收了多少件投稿」
AI:同上,日期传 2026-07-15,产出当天报表。
用户:「今天投稿的人里,有没有重复投稿的?都什么单位?」 AI:先跑上述流程生成报表,再基于 Excel 的「作品信息」「统计摘要」回答单位分布、重复/多版本归并情况。
一句话:只要提到「统计/汇总 + 邮箱/收稿/投稿 + (某天)」,就用本技能。不会用就直接说「统计某天邮箱」,AI 会接手剩下的。
本技能不是为某次活动定制的,而是一套**「按日期从邮箱拉取附件 → 归并统计 → 出 Excel/PDF 报表」的通用管线**。任何存在「某邮箱每天收到带附件的投稿/提交邮件、需要按人归并盘点」的场景都能直接套用,填自己的邮箱即可。典型用途:
extract_workinfo.mjs / generate_email_report.mjs 调整)。通用点:① 邮箱完全参数化(
SUB_EMAIL_*);② 交付目录、历史页起始日、活动名称均可环境变量配置;③ 正文/主题/附件名/附件内.docx四路提取作者·作品·单位·电话·说明,适配大多数投稿表单;④ 网易/发票等系统邮件与压缩包有既定过滤与手动补录流程。
以下截图来自用假数据(3 封投稿 / 4 张图片)跑真实脚本生成的样例。你的实际产出会按同样格式、包含你邮箱的真实投稿数据。 完整样例文件见
docs/sample/目录。
PDF 封面——当日统计概览

Excel 四表中的两页:作品信息表 + 附件明细表

PDF 文末:作品图片预览(每张投稿原图按收稿顺序排列)

| Sheet | 内容 | 关键列 |
|---|---|---|
| 邮件总览 | 每封邮件一行 | 发件人 / 主题 / 摘要 |
| 附件明细 | 每张图像附件一行,含嵌入的缩略图 | 序号 / 发件人 / 主题 / 文件名 / 大小 / 格式 / 状态 / 图片预览 |
| 作品信息 | 按发件人归并(同一人多封→一人一行) | 序号 / 作者姓名 / 作品名称 / 作品说明 / 工作单位 / 联系电话 / 作品件数 |
| 统计摘要 | 当日汇总数字 | 邮件总数 / 附件总数(去重) / 投稿人数 / 总大小 / 重复附件数 |
scripts/ 内的 5 个脚本互相依赖,中间产物(email_data_YYYY-MM-DD.json / attachments/)都生成在 scripts/ 内,整体可迁移。scripts/.env 填 SUB_EMAIL_IMAP_HOST / SUB_EMAIL_ACCOUNT / SUB_EMAIL_AUTH_CODE(模板见 .env.example)。支持 126/163/qq/gmail 等标准 IMAP 邮箱。SUB_DESKTOP_DIR,默认 ~/Desktop/邮件附件(Excel/PDF/原图放 <根>/YYYY-MM-DD/)。SUB_HISTORY_START_DATE(如 2026-07-09);未设置则不生成历史回顾页。SUB_EVENT_NAME,在 PDF 封面与页脚展示(如某征稿活动名);留空则用通用标题「投稿作品收稿汇总」。推荐用法(一条命令全自动):
node scripts/run.mjs YYYY-MM-DD(缺省=今天)。运行器会依次跑完下面全部步骤,并自动把 Excel/PDF/原图交付到桌面~/Desktop/邮件附件/YYYY-MM-DD/,无需手动逐步执行、也不用手动复制文件。下面的 7 步保留作分步排查 / 高级用法。
node download_via_imap.mjs YYYY-MM-DD → 附件源存 scripts/attachments/<日期>/node fetch_text_bodies.mjs <日期>node extract_workinfo.mjs <日期>(从正文/主题/附件名填 author/work/unit/phone;并读取附件中的 .docx 投稿说明(jszip 解 word/document.xml),抽「创作年份+作品说明」写入 e.workYear/e.workDesc,主提取缺字段("—")时回退 docx 的姓名/作品/电话/单位)senderName.startsWith("网易") || senderEmail.endsWith("@service.netease.com");不能按 @126/@163 域名一刀切(投稿人用这些域名)node generate_email_report.mjs <日期> → 输出 邮件附件统计_YYYY-MM-DD.xlsx(scripts/ 内)python generate_summary_pdf_from_xlsx.py <桌面xlsx路径> <桌面pdf路径>os.path.dirname(xlsx路径) 定位原图去嵌入 PDF。先把 xlsx cp 到桌面日期目录、再传该绝对路径~/Desktop/邮件附件/YYYY-MM-DD/(三者同目录);网易残留 null_*.pdf 不复制e.authordateStr/date 校正为文件名对应日期extract_workinfo.mjs 读取,抽「创作年份+作品说明」填入作品信息表「作品说明」列(格式「YYYY年|说明文字」);均不计入件数/大小等统计数字Paragraph(wordWrap='CJK') 按中文字符换行;表头 n 转为
普通使用遇到问题(授权码、乱码、超大附件、断点续传等),请直接看 INSTALL.md 的「常见问题 FAQ」,那里有白话解答。下面仅保留开发者/维护者才需要关心的固化技术备注,普通用户可跳过。
mergeCells 永久弃用:合并会清空锚点单元格值。一律改「留空法」:同人首行写值、后续行空path.extname 抓到文件名随机串 → format 乱码、图片无法嵌入。已加 detectFormatByMagic() 魔数兜底(download 和 generate 都做)download_via_imap.mjs 保存附件时只用原始文件名拼路径(outDir/原始名)。不同邮件的同名附件(如多人都叫 0714_1.jpg、0619_1.jpg、33D36900@….jpg)保存到同一路径,后下载的覆盖先下载的 → 跨邮件错配。曾导致投稿人A《作品甲》的 0714_1.jpg 被投稿人B同名图覆盖,表格里投稿人A挂着别人的图、磁盘少了一张真图。String(uid) + '_' + path.basename(原始名).replace(/[/\]/g,'_')),物理文件名全局唯一,彻底杜绝覆盖。两处都要改:①保存新附件处;②断点复用核对 existingPath 处(downloadPart(uid, att) 已带 uid,作用域覆盖两处)。a.duplicate,磁盘原样保留、不删。extract_workinfo.mjs,在 MD5 字节级去重 → 邮件级去重之后(三级级联的第三级)。只对图像附件生效。extract_workinfo.mjs 里做。MD5 字节级必须下载(要算文件哈希);同名作品级当前读 a.localPath 的 size 也依赖下载。但原理上同名作品这一级可不下载就判定——IMAP BODYSTRUCTURE 的 part.size 已返回每个附件字节大小(不下传内容),作品名从邮件主题/正文解析也不依赖附件,故可做到"先选保留项、再只下那张"。当前脚本未做"先判后下"优化,仍是先全下后判;MD5 级则无论如何都要下载才能比对。a.duplicate=true + duplicateReason='same-work-smaller'。a.duplicate 的多余原图必须从桌面目录删除(用户要求桌面只留有效附件)。删前先从 email_data 提取所有 duplicate && localPath 的 basename 列表,逐个 rm;保留项天然不在名单内。清理后桌面图片数 = Excel 附件明细行数。u200b-u200fufeff 阻断单位提取unitM 未复用 term 变量缺"地址"边界 等)导致作者提取失败《》 时,原把文件名(通常是作品名)误赋给 author → 改为:无《》时文件名当 work、author 从 subject 开头取中文名xa0 杂音:work 标签只认 作品(?:名称)? 不认 画作名称/画名 → 扩展;term 终止符缺 联系 → 正文"某某联系手机:136…"的 xa0 被当分隔导致 author 多出"联系"→ term 加 联系手机|联系e.workName || e.work 把占位符"—"当真值 → 改为非"—"才优先 e.worktype 是小写 text/image,须 .toUpperCase()==='TEXT'Paragraph(wordWrap='CJK'),表头 n 转
generate_summary_pdf_from_xlsx.py 用 dirname(xlsx) 定位原图——传工作区相对路径会因空串报错。必须先把 xlsx 放到桌面日期目录再传绝对路径extract_workinfo.mjs 完全不解析 .docx,导致投稿人「作品信息.docx」里的创作年份、作品说明长文从未进报表。现用 jszip 读 word/document.xml,parseDocxInfo 抽 创作年份/作品说明/姓名/作品/电话/单位 → 写 e.workYear/e.workDesc,主提取缺字段("—")时回退。⚠️ extract_workinfo.mjs 是 ESM,jszip 须从 NODE_MODULES_DIR(SUB_NODE_MODULES 或 WorkBuddy managed 环境)require;主循环为 async IIFE 以 await 读 docxwork_rows,原代码只取前 7 列、且列序按旧布局——会列错位 + w[7] 越界。必须同步:①重建取满 8 列且按新列序;②作品信息表表头与 colWidths 对齐(现 [10,20,24,30,34,26,20,10]=174mm,顶满不可再加列)extract_workinfo.mjs 会把手动注入值冲掉、自动抽成乱码。修法:重跑 extract 后,对这类邮件手动把 author/workName/unit/phone 还原。长期应在 extract 里对"超大附件通知"邮件跳过自动提取(当前以手动还原为准)。通用处理:用户手动下载超大附件压缩包后,用 Python zipfile(cp437→gbk 解码)解包,再手动补写该邮件的 author/workName/unit/phonesenderName.startsWith("网易") || senderEmail.endsWith("@service.netease.com")(脚本已实现)email_data_<日期>.json 做整封剔除(可按关键词 grep 后从 json 中删除该记录,再跑后续脚本);不要只靠肉眼,凡命中关键词即剔run.mjs 跑完会自动检测并提示这类「超大附件通知」邮件,给出处理步骤:① 网页端下载解压 → ② 把里面图片/文档放进桌面交付目录 ~/Desktop/邮件附件/YYYY-MM-DD/ → ③ 重跑 run.mjs(自动复用已有数据)或由 AI 手动补录。这属于客观限制,不追求全自动。邮件附件统计_YYYY-MM-DD.xlsx)、PDF(投稿作品汇总_YYYY-MM-DD.pdf)、投稿原图都必须在 ~/Desktop/邮件附件/YYYY-MM-DD/ 日期目录内(与源附件同目录)null_*.pdf 不复制a.duplicate=true 对应的多余原图文件(保留版已在表格/PDF 显示);删前列出 duplicate 的 localPath basename 逐一 rm,保留项自然跳过。清理后桌面图片数须 = Excel 附件明细行数SUB_HISTORY_START_DATE),累计数字合理null_*.pdf 残留a.duplicate 的多余原图已从桌面目录删除,桌面图片数 = Excel 附件明细行数(本例 20→14)uid_ 前缀;抽查一个多人共有的同名文件(如 0714_1.jpg)在表格中应指向其本人 uid 的文件、而非别人;跨 uid 的 MD5 重复对应为 0~/.workbuddy/skills/email-submission-daily/(详见 INSTALL.md)generate_summary_pdf_from_xlsx.py 改 FONT_PATH相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章