Install
openclaw skills install @thcjp/email-daily-summary基于 browser-use 自动登录多邮箱,抓取当日邮件生成邮件摘要与统计日报,支持定时调度和跨账号汇总。
openclaw skills install @thcjp/email-daily-summary核心功能: 本技能提供化工作流场景等能力。
核心功能: 本技能提供自动化配置和灵活的参数设置、时使用、、工作流优化时使用、处理、工作流优化时使用、化配置和灵活的参数设置等能力。
通过 browser-use CLI 驱动浏览器自动化登录 Web 邮箱,抓取当日邮件并生成结构化日报。优先复用本机 Chrome 已登录会话(--browser real),避免在脚本中存储明文密码.
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| input | string | 是 | Email Daily Summary处理的输入数据或指令 |
| options | object | 否 | 附加配置选项,如模式选择、格式偏好等 |
| callback_url | string | 否 | 异步处理完成后的回调通知URL |
| 能力 | 免费版 | 付费版 |
|---|---|---|
| 基础功能 | 支持 | 支持 |
| Email Daily Summary自动登录邮箱并生成 | 不支持 | 支持 |
| 多标签页并行抓取 | 不支持 | 支持 |
| 反爬虫策略自动绕过 | 不支持 | 支持 |
| 页面结构变化自适应 | 不支持 | 支持 |
| 批量导出结构化数据 | 不支持 | 支持 |
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
需要配置对应API Key,详见上文环境配置章节
API Key配置方式:
export API_KEY="${API_KEY:?请设置环境变量}"
配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.
--browser real)或 --headed 手动登录,覆盖 Gmail、Outlook、QQ 邮箱、163/126 邮箱、企业微信邮箱tr.zA 等),获取发件人、主题、摘要片段、时间戳四元组.zE)、可见总数、按发件人域名/主题关键词分类browser-use extract 用自然语言指令提取前 N 封邮件并按重要性排序uv pip install browser-use[cli]
browser-use install
--browser real 复用会话)browser-use --version 可正常输出,否则按前置依赖安装--browser real,首次登录用 --headedbrowser-use state 探测当前 DOM 结构eval 脚本提取邮件四元组,或 extract 让 AI 自然语言提取screenshot 归档快照browser-use close 释放浏览器会话2026-07-20)inbox_2026-07-20.png 截图crontab 每日 09:00 自动执行boss@company.com、finance@bank.com)2026-07-14 至 2026-07-20)DATE=$(date +%Y-%m-%d)
OUTPUT_DIR="./email_summaries"
mkdir -p "$OUTPUT_DIR"
# ...
browser-use --browser real open https://mail.google.com
sleep 3
# ...
# 探测页面状态
browser-use state
# ...
# 截图归档
browser-use screenshot "$OUTPUT_DIR/inbox_$DATE.png"
# ...
# 提取前 20 封邮件四元组
browser-use eval "
const emails = [];
document.querySelectorAll('tr.zA').forEach((row, i) => {
if (i < 20) {
const sender = row.querySelector('.yX.xY span')?.innerText || '';
const subject = row.querySelector('.y6 span')?.innerText || '';
const snippet = row.querySelector('.y2')?.innerText || '';
const time = row.querySelector('.xW.xY span')?.innerText || '';
emails.push({ sender, subject, snippet, time });
}
});
JSON.stringify(emails, null, 2);
"
# ...
# 未读统计
browser-use eval "
(() => {
const unread = document.querySelectorAll('.zE').length;
const visible = document.zA').length;
return JSON.stringify({ unread, visible, timestamp: new Date().toISOString() });
})()
"
# ...
browser-use close
输出示例:
==========================================
邮件日报 - 2026-07-20
==========================================
统计概览:
- 未读邮件: 12 封
- 可见邮件: 50 封
- 命中白名单: 2 封
# ...
重要邮件:
1. boss@company.com | 项目进度汇报 - 紧急 | 09:30
2. finance@bank.com | 账单提醒 | 08:15
# ...
建议操作:
- 回复 boss@company.com
- 处理 3 封审批邮件
==========================================
sleep 3
# ...
browser-use eval "
const hits = [];
document.zA').forEach(row => {
querySelector('.yX.xY span')?.innerText || '';
if (sender.toLowerCase().includes('boss@company.com')) {
hits.push({
sender,
subject: row.querySelector('.y6 span')?.innerText || '',
time: row.querySelector('.xW.xY span')?.innerText || ''
});
}
});
JSON.stringify(hits, null, 2);
"
输出示例:
[
{ "sender": "boss@company.com", "subject": "项目进度汇报 - 紧急", "time": "09:30" },
com", "subject": "周一晨会议程", "time": "07:45" }
]
DATE=$(date +%Y-%m-%d)
REPORT="$OUTPUT_DIR/daily_$DATE.md"
echo "# 跨邮箱日报 $DATE" > "$REPORT"
# ...
# Gmail 分节
sleep 3
echo "## Gmail" >> "$REPORT"
browser-use extract "提取前 10 封邮件的发件人、主题、时间,按重要性排序" >> "$REPORT"
browser-use close
# ...
# QQ 邮箱分节
sleep 3
echo "## QQ 邮箱" >> "$REPORT"
browser-use extract "提取前 10 封邮件的发件人、主题、时间,按重要性排序" >> "$REPORT"
browser-use close
# ...
echo "报告已生成: $REPORT"
crontab -e
# 每日 09:00 执行
0 9 * * * /path/to/email_daily_summary.sh >> /path/to/logs/email_summary.log 2>&1
创建 ~/Library/LaunchAgents/com.email.dailysummary.plist,设置 StartCalendarInterval 为 Hour=9, Minute=0,ProgramArguments 指向脚本路径,然后:
launchctl load ~/Library/LaunchAgents/com.email.dailysummary.plist
browser-use 报 command not founduv pip install browser-use[cli] 后再执行 browser-use install 安装浏览器依赖--browser real 打开邮箱后跳转到登录页--headed 模式手动登录一次,或在本机 Chrome 中重新登录目标邮箱后eval 返回空数组或 unread: 0 但页面明显有未读邮件browser-use state 重新探测当前 DOM,更新选择器(如 Gmail 由 tr.zA 改为 tr.zB),并将新选择器写入配置--headed 模式由人工完成验证;自动化流程不可绕过验证码state 显示页面已加载但 tr.zA 数量为 0open 与 eval 之间插入 sleep 5,或循环 browser.scroll('down') 触发懒加载browser-use screenshot 报权限错误或路径不存在mkdir -p "$OUTPUT_DIR" 创建目录,确认运行用户对目录有写权限eval 单次执行超过浏览器脚本超时阈值i < 20,滚动后再抓取下一批,合并结果browser-use: command not foundexport PATH=/usr/local/bin:/opt/homebrew/bin:$PATH,或使用 browser-use 绝对路径优先使用 --browser real 模式复用本机 Chrome 已登录会话,凭证由 Chrome 管理,脚本不接触密码。必须登录时,密码从系统环境变量或 keyring 读取,不硬编码.
顺序执行多个 browser-use --browser real open <url> 块,每个邮箱独立 extract 后追加到同一份 Markdown 报告,按邮箱分节展示。参考案例 3.
extract)需要什么配置?extract 依赖 browser-use 内置 LLM,需配置 OPENAI_API_KEY 或同等 LLM 凭证。未配置时降级为纯 eval 抓取四元组,不生成 AI 摘要.
将 --browser real 替换为 --headless,但无头模式无法复用 Chrome 已登录会话,需改用 token 或手动登录流程。生产环境定时任务推荐保持 --browser real 并锁定屏幕.
通过 OUTPUT_DIR 环境变量控制,默认 ./email_summaries。建议设置为绝对路径(如 /var/log/email_summaries)以便定时任务稳定写入.
分页抓取:每次 eval 取 20 封,browser.scroll('down') 触发加载,sleep 1 等待渲染,循环至 tr.zA 数量不再增长。合并所有批次后生成日报.
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| LLM响应超时或无响应 | 网络延迟或模型负载过高 | 请求重试;确认Agent平台LLM服务正常 |
| 输入内容格式不正确 | 用户输入不符合skill预期格式 | 检查输入是否符合skill使用说明中的格式要求,参考示例章节 |
| 执行结果与预期不符 | 指令描述不够明确或上下文不足 | 提供更详细的指令描述,补充必要的上下文信息 |
| 命令执行失败 | 运行环境不满足要求或权限不足 | 确认运行环境符合依赖说明中的要求;检查命令权限设置 |
tr.zA、.zE 等选择器失效,需定期校验--browser real 需要本机 Chrome 已登录目标邮箱,服务器或无 GUI 环境不适用--browser real 失效,需 --headed 人工辅助--browser real 复用会话| 风险项 | 等级 | 防护措施 | 验证方法 |
|---|---|---|---|
| API密钥泄露 | 高 | 通过环境变量配置,禁止硬编码 | 定期检查代码和配置文件 |
| 命令执行风险 | 高 | 仅执行白名单命令,避免拼接用户输入 | 使用沙箱环境测试 |
| 网络通信安全 | 中 | 使用HTTPS协议,验证SSL证书 | 定期检查证书有效期 |
| 敏感数据暴露 | 高 | 输出结果中不包含密钥、令牌等敏感信息 | 日志脱敏审查 |
| 未授权访问 | 中 | 限制访问权限,实施认证机制 | 定期审计访问日志 |
| 操作步骤 | 手动耗时 | 自动化耗时 | 时间节约 | 准确率提升 |
|---|---|---|---|---|
| 邮件阅读 | 30分钟/封 | 1分钟/封 | 29分钟 | 95% |
| 邮件筛选 | 10分钟/封 | 1分钟/封 | 9分钟 | 98% |
| 邮件分类 | 5分钟/封 | 1分钟/封 | 4分钟 | 99% |
| 邮件统计 | 20分钟 | 2分钟 | 18分钟 | 100% |
| 邮件摘要 | 15分钟/封 | 1分钟/封 | 14分钟 | 97% |
| 对比维度 | 本技能 | 手动操作 | Python脚本 | 专业软件 |
|---|---|---|---|---|
| 自动化程度 | 高 | 低 | 中 | 高 |
| 操作便捷性 | 高 | 低 | 中 | 高 |
| 功能丰富性 | 高 | 低 | 中 | 高 |
| 成本效益 | 高 | 低 | 中 | 高 |
| 适应场景 | 广泛 | 有限 | 有限 | 有限 |
| 痛点 | 描述 | 影响范围 | 解决方案 | 量化效果 |
|---|---|---|---|---|
| 邮件处理效率低 | 邮件处理耗时,影响工作效率 | 个人、团队 | 邮件自动化处理 | 时间节约30% |
| 邮件信息遗漏 | 邮件信息处理不全面,可能导致重要信息遗漏 | 个人、团队 | 邮件智能摘要 | 准确率提升98% |
| 邮件分类困难 | 邮件分类工作量大,容易出错 | 个人、团队 | 邮件自动分类 | 准确率提升99% |
| 错误现象 | 可能原因 | 诊断步骤 | 解决方案 |
|---|---|---|---|
| 无法登录邮箱 | 密码错误或账户异常 | 检查密码是否正确,尝试使用其他邮箱账户 | 修改密码或更换邮箱账户 |
| 邮件抓取失败 | 网络问题或邮箱设置问题 | 检查网络连接,确认邮箱设置正确 | 修复网络问题或调整邮箱设置 |
| 统计数据错误 | 数据抓取错误或计算错误 | 检查数据抓取过程,确认计算逻辑正确 | 重新抓取数据或修正计算逻辑 |
| 无法生成摘要 | 邮件内容复杂或摘要工具问题 | 检查邮件内容,确认摘要工具正常 | 简化邮件内容或更换摘要工具 |
| 定时任务未执行 | 定时任务配置错误或系统问题 | 检查定时任务配置,确认系统时间正确 | 修正定时任务配置或检查系统时间 |
针对邮件摘要使用中可能遇到的常见问题,提供以下排查方案:
| 错误类型 | 原因分析 | 解决方案 |
|---|---|---|
| API认证失败(401) | API密钥错误或过期 | 检查密钥配置,重新生成token |
| 接口限流(429) | 请求频率超出限制 | 降低调用频率,启用重试退避策略 |
| 响应超时(504) | 网络延迟或服务端负载过高 | 增加超时阈值,检查网络连接 |
| 文件不存在 | 路径错误或文件未创建 | 检查路径拼写,确认文件已生成 |
| 文件格式不支持 | 扩展名不在支持列表中 | 转换为支持的格式后重试 |
| 权限不足 | 当前用户无读写权限 | 检查文件权限,以管理员身份运行 |
| 命令执行失败 | 参数错误或环境依赖缺失 | 检查命令语法,确认依赖已安装 |
| 进程超时 | 命令执行时间过长 | 增加超时设置,优化命令参数 |
| 网络连接失败 | DNS解析失败或防火墙拦截 | 检查网络配置,确认代理设置 |