名称: morning-email-rollup
描述: 每日上午 8 点(丹佛时间)通过 AI 生成摘要,汇总重要邮件和日历事件
元数据: {"clawdbot":{"emoji":"📧","requires":{"bins":["gog","gemini","jq","date"]}}}
每日自动生成重要邮件的摘要,并于丹佛时间上午 8 点发送至 Telegram。
必需: 设置您的 Gmail 账户邮箱:
export GOG_ACCOUNT="your-email@gmail.com"
或者直接编辑脚本以设置默认值。
# 默认(10 封邮件)
bash skills/morning-email-rollup/rollup.sh
# 自定义邮件数量
MAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh
MAX_EMAILS=5 bash skills/morning-email-rollup/rollup.sh
cat $HOME/clawd/morning-email-rollup-log.md
gog 从 Google 日历中列出今日事件is:important OR is:starred newer_than:1d脚本使用与查询 Gmail 相同的 gog CLI,自动从您的 Google 日历中包含今日事件。
优雅降级处理:
- 如果未安装 gog → 日历部分将被静默跳过(无错误)
- 如果今日无事件 → 日历部分将被静默跳过
- 如果存在事件 → 显示带 12 小时制时间和标题的格式化列表
要求:
- 必须安装并授权 gog
- 使用为 Gmail 配置的同一 Google 账户(通过 GOG_ACCOUNT 环境变量设置)
邮件需满足以下任一条件:
- 被 Gmail 标记为重要(闪电图标)
- 被您手动加星标
- 在过去 24 小时内收到
每封邮件使用 Gemini CLI (gemini) 进行摘要:
- 提取邮件正文(清理 HTML/CSS)
- 发送至 gemini --model gemini-2.0-flash,附带提示要求用 1 句话总结
- 摘要为中长篇幅的自然语言(非直接抓取内容)
- 如果 Gemini 不可用,则回退到清理后的正文文本
重要提示: 邮件正文作为提示的一部分传递(而非通过标准输入),因为 gemini CLI 无法正确处理带提示的管道输入。
示例输出:
🔴 **William Ryan: 团队会议邀请**
邮件邀请您参加明天下午 2 点的团队会议,讨论 Q1 路线图并为即将到来的冲刺分配任务。
所有邮件都会显示其中一个标记,以保持视觉一致性。
主题和摘要清理:
- 主题行中的额外引号会自动去除(例如,""Agent Skills"" → Agent Skills)
- Gemini 生成的摘要也会清理首尾引号
- 这确保了在 Telegram/其他渠道中输出干净、可读
在您首选的时间设置每日 cron 任务:
cron add --name "Morning Email Rollup" \
--schedule "0 8 * * *" \
--tz "America/Denver" \
--session isolated \
--message "GOG_ACCOUNT=your-email@gmail.com bash /path/to/skills/morning-email-rollup/rollup.sh"
请根据您的偏好调整时间(上午 8:00)和时区。
默认情况下,汇总显示 10 封邮件。要更改此设置:
临时(一次性):
MAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh
永久:
编辑 skills/morning-email-rollup/rollup.sh:
MAX_EMAILS="${MAX_EMAILS:-20}" # 将 10 改为您偏好的数字
编辑 skills/morning-email-rollup/rollup.sh:
# 当前:过去 24 小时内重要或已加星标的邮件
IMPORTANT_EMAILS=$(gog gmail search 'is:important OR is:starred newer_than:1d' --max 20 ...)
# 其他搜索条件示例:
# 仅未读的重要邮件
IMPORTANT_EMAILS=$(gog gmail search 'is:important is:unread newer_than:1d' --max 20 ...)
# 特定发件人
IMPORTANT_EMAILS=$(gog gmail search 'from:boss@company.com OR from:client@example.com newer_than:1d' --max 20 ...)
# 按标签/类别
IMPORTANT_EMAILS=$(gog gmail search 'label:work is:important newer_than:1d' --max 20 ...)
更新 cron 计划:
# 列出 cron 任务以获取 ID
cron list
# 更新计划(示例:改为上午 7 点而非 8 点)
cron update <job-id> --schedule "0 7 * * *" --tz "America/Denver"
编辑 rollup.sh 中 summarize_email() 函数内的提示词:
# 当前:中长篇幅的 1 句话
"Summarize this email in exactly 1 sentence of natural language. Make it medium to long length. Don't use quotes:"
# 更短的摘要
"Summarize in 1 short sentence:"
# 更多细节
"Summarize in 2-3 sentences with key details:"
编辑 summarize_email() 中的 gemini 命令:
# 当前:gemini-2.0-flash(快速)
gemini --model gemini-2.0-flash "Summarize..."
# 使用不同的模型
gemini --model gemini-pro "Summarize..."
# 检查 cron 任务是否启用
cron list
# 检查上次运行状态
cron runs <job-id>
# 手动测试
bash skills/morning-email-rollup/rollup.sh
gog gmail search 'is:important newer_than:1d'gemini CLI 是否已安装:which geminiecho "test" | gemini "Summarize this:"America/Denver (MST/MDT)cron update <job-id> --tz "Your/Timezone"所有汇总运行记录都保存在:
$HOME/clawd/morning-email-rollup-log.md
格式:
- [2026-01-15 08:00:00] 🔄 开始晨间邮件汇总
- [2026-01-15 08:00:02] ✅ 汇总完成:15 封邮件