336 lines
8.0 KiB
Markdown
336 lines
8.0 KiB
Markdown
|
|
---
|
|||
|
|
name: email-daily-summary
|
|||
|
|
description: 自动登录邮箱账户(Gmail、Outlook、QQ邮箱等)并生成每日邮件摘要。当用户想要获取邮件摘要、查看重要消息或创建每日邮件简报时使用。
|
|||
|
|
allowed-tools: Bash(browser-use:*), Bash(echo:*), Bash(date:*)
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Email Daily Summary Skill
|
|||
|
|
|
|||
|
|
这个技能帮助你自动登录邮箱,获取邮件内容,并生成每日邮件总结。
|
|||
|
|
|
|||
|
|
## 功能特性
|
|||
|
|
|
|||
|
|
- 🔐 支持多种邮箱登录(Gmail、Outlook、QQ 邮箱、163 邮箱等)
|
|||
|
|
- 📧 自动获取最新邮件列表
|
|||
|
|
- 📝 智能生成邮件摘要
|
|||
|
|
- 🏷️ 按重要性/发件人/主题分类
|
|||
|
|
- 📊 生成每日邮件统计报告
|
|||
|
|
|
|||
|
|
## 前置要求
|
|||
|
|
|
|||
|
|
1. 安装 browser-use CLI:
|
|||
|
|
```bash
|
|||
|
|
uv pip install browser-use[cli]
|
|||
|
|
browser-use install
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. 确保已在浏览器中登录过邮箱(使用 real 模式可直接复用登录状态)
|
|||
|
|
|
|||
|
|
## 使用方法
|
|||
|
|
|
|||
|
|
### 方式一:使用已登录的浏览器(推荐)
|
|||
|
|
|
|||
|
|
使用 `--browser real` 模式可以复用你 Chrome 浏览器中已登录的邮箱会话:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Gmail
|
|||
|
|
browser-use --browser real open https://mail.google.com
|
|||
|
|
|
|||
|
|
# Outlook
|
|||
|
|
browser-use --browser real open https://outlook.live.com
|
|||
|
|
|
|||
|
|
# QQ 邮箱
|
|||
|
|
browser-use --browser real open https://mail.qq.com
|
|||
|
|
|
|||
|
|
# 163 邮箱
|
|||
|
|
browser-use --browser real open https://mail.163.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方式二:手动登录流程
|
|||
|
|
|
|||
|
|
如果需要手动登录,使用 `--headed` 模式查看操作过程:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 打开邮箱登录页面(以 Gmail 为例)
|
|||
|
|
browser-use --headed open https://accounts.google.com
|
|||
|
|
|
|||
|
|
# 查看页面元素
|
|||
|
|
browser-use state
|
|||
|
|
|
|||
|
|
# 输入邮箱地址(根据 state 返回的索引)
|
|||
|
|
browser-use input <email_input_index> "your-email@gmail.com"
|
|||
|
|
browser-use click <next_button_index>
|
|||
|
|
|
|||
|
|
# 输入密码
|
|||
|
|
browser-use input <password_input_index> "your-password"
|
|||
|
|
browser-use click <login_button_index>
|
|||
|
|
|
|||
|
|
# 跳转到邮箱
|
|||
|
|
browser-use open https://mail.google.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 获取邮件列表
|
|||
|
|
|
|||
|
|
登录成功后,获取邮件列表:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 获取当前页面状态,查看邮件列表
|
|||
|
|
browser-use state
|
|||
|
|
|
|||
|
|
# 截图保存当前邮件列表
|
|||
|
|
browser-use screenshot emails_$(date +%Y%m%d).png
|
|||
|
|
|
|||
|
|
# 使用 JavaScript 提取邮件信息(Gmail 示例)
|
|||
|
|
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);
|
|||
|
|
"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用 Python 生成邮件总结
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 初始化邮件数据收集
|
|||
|
|
browser-use python "
|
|||
|
|
emails_data = []
|
|||
|
|
summary_date = '$(date +%Y-%m-%d)'
|
|||
|
|
"
|
|||
|
|
|
|||
|
|
# 滚动页面加载更多邮件
|
|||
|
|
browser-use python "
|
|||
|
|
for i in range(3):
|
|||
|
|
browser.scroll('down')
|
|||
|
|
import time
|
|||
|
|
time.sleep(1)
|
|||
|
|
"
|
|||
|
|
|
|||
|
|
# 提取邮件数据(需要根据实际邮箱 DOM 结构调整)
|
|||
|
|
browser-use python "
|
|||
|
|
import json
|
|||
|
|
|
|||
|
|
# 获取页面 HTML 进行解析
|
|||
|
|
html = browser.html
|
|||
|
|
|
|||
|
|
# 这里需要根据具体邮箱服务解析 HTML
|
|||
|
|
# 示例:统计基本信息
|
|||
|
|
print(f'=== 邮件日报 {summary_date} ===')
|
|||
|
|
print(f'页面 URL: {browser.url}')
|
|||
|
|
print(f'页面标题: {browser.title}')
|
|||
|
|
"
|
|||
|
|
|
|||
|
|
# 截图保存
|
|||
|
|
browser-use python "
|
|||
|
|
browser.screenshot(f'email_summary_{summary_date}.png')
|
|||
|
|
print(f'截图已保存: email_summary_{summary_date}.png')
|
|||
|
|
"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 完整的每日邮件总结脚本
|
|||
|
|
|
|||
|
|
创建一个完整的总结流程:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# email_daily_summary.sh
|
|||
|
|
|
|||
|
|
DATE=$(date +%Y-%m-%d)
|
|||
|
|
TIME=$(date +%H:%M:%S)
|
|||
|
|
OUTPUT_DIR="./email_summaries"
|
|||
|
|
mkdir -p "$OUTPUT_DIR"
|
|||
|
|
|
|||
|
|
echo "=========================================="
|
|||
|
|
echo "📧 邮件日报生成中..."
|
|||
|
|
echo "日期: $DATE $TIME"
|
|||
|
|
echo "=========================================="
|
|||
|
|
|
|||
|
|
# 1. 打开邮箱(使用已登录的浏览器)
|
|||
|
|
browser-use --browser real open https://mail.google.com
|
|||
|
|
|
|||
|
|
# 2. 等待页面加载
|
|||
|
|
sleep 3
|
|||
|
|
|
|||
|
|
# 3. 获取页面状态
|
|||
|
|
echo ""
|
|||
|
|
echo "📋 当前邮箱状态:"
|
|||
|
|
browser-use state
|
|||
|
|
|
|||
|
|
# 4. 截图保存邮件列表
|
|||
|
|
echo ""
|
|||
|
|
echo "📸 保存截图..."
|
|||
|
|
browser-use screenshot "$OUTPUT_DIR/inbox_$DATE.png"
|
|||
|
|
|
|||
|
|
# 5. 提取邮件数据
|
|||
|
|
echo ""
|
|||
|
|
echo "📊 邮件统计:"
|
|||
|
|
browser-use eval "
|
|||
|
|
(() => {
|
|||
|
|
const unreadCount = document.querySelectorAll('.zE').length;
|
|||
|
|
const totalVisible = document.querySelectorAll('tr.zA').length;
|
|||
|
|
return JSON.stringify({
|
|||
|
|
unread: unreadCount,
|
|||
|
|
visible: totalVisible,
|
|||
|
|
timestamp: new Date().toISOString()
|
|||
|
|
});
|
|||
|
|
})()
|
|||
|
|
"
|
|||
|
|
|
|||
|
|
# 6. 关闭浏览器
|
|||
|
|
echo ""
|
|||
|
|
echo "✅ 完成!截图保存至: $OUTPUT_DIR/inbox_$DATE.png"
|
|||
|
|
browser-use close
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 支持的邮箱服务
|
|||
|
|
|
|||
|
|
| 邮箱服务 | 登录 URL | 收件箱 URL |
|
|||
|
|
|---------|---------|-----------|
|
|||
|
|
| Gmail | https://accounts.google.com | https://mail.google.com |
|
|||
|
|
| Outlook | https://login.live.com | https://outlook.live.com |
|
|||
|
|
| QQ 邮箱 | https://mail.qq.com | https://mail.qq.com |
|
|||
|
|
| 163 邮箱 | https://mail.163.com | https://mail.163.com |
|
|||
|
|
| 126 邮箱 | https://mail.126.com | https://mail.126.com |
|
|||
|
|
| 企业微信邮箱 | https://exmail.qq.com | https://exmail.qq.com |
|
|||
|
|
|
|||
|
|
## 生成 AI 邮件摘要
|
|||
|
|
|
|||
|
|
如果配置了 API Key,可以使用 AI 自动生成邮件摘要:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 使用 AI 提取邮件摘要(需要 BROWSER_USE_API_KEY)
|
|||
|
|
browser-use --browser real open https://mail.google.com
|
|||
|
|
browser-use extract "提取前 10 封邮件的发件人、主题和摘要,按重要性排序"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 定时任务设置
|
|||
|
|
|
|||
|
|
### macOS/Linux (crontab)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 编辑 crontab
|
|||
|
|
crontab -e
|
|||
|
|
|
|||
|
|
# 添加每日早上 9 点执行的任务
|
|||
|
|
0 9 * * * /path/to/email_daily_summary.sh >> /path/to/logs/email_summary.log 2>&1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### macOS (launchd)
|
|||
|
|
|
|||
|
|
创建 `~/Library/LaunchAgents/com.email.dailysummary.plist`:
|
|||
|
|
|
|||
|
|
```xml
|
|||
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|||
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|||
|
|
<plist version="1.0">
|
|||
|
|
<dict>
|
|||
|
|
<key>Label</key>
|
|||
|
|
<string>com.email.dailysummary</string>
|
|||
|
|
<key>ProgramArguments</key>
|
|||
|
|
<array>
|
|||
|
|
<string>/bin/bash</string>
|
|||
|
|
<string>/path/to/email_daily_summary.sh</string>
|
|||
|
|
</array>
|
|||
|
|
<key>StartCalendarInterval</key>
|
|||
|
|
<dict>
|
|||
|
|
<key>Hour</key>
|
|||
|
|
<integer>9</integer>
|
|||
|
|
<key>Minute</key>
|
|||
|
|
<integer>0</integer>
|
|||
|
|
</dict>
|
|||
|
|
<key>StandardOutPath</key>
|
|||
|
|
<string>/tmp/email_summary.log</string>
|
|||
|
|
<key>StandardErrorPath</key>
|
|||
|
|
<string>/tmp/email_summary_error.log</string>
|
|||
|
|
</dict>
|
|||
|
|
</plist>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
加载任务:
|
|||
|
|
```bash
|
|||
|
|
launchctl load ~/Library/LaunchAgents/com.email.dailysummary.plist
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 输出示例
|
|||
|
|
|
|||
|
|
生成的邮件总结报告格式:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
==========================================
|
|||
|
|
📧 邮件日报 - 2026-01-30
|
|||
|
|
==========================================
|
|||
|
|
|
|||
|
|
📊 统计概览:
|
|||
|
|
- 未读邮件: 12 封
|
|||
|
|
- 今日新邮件: 28 封
|
|||
|
|
- 重要邮件: 5 封
|
|||
|
|
|
|||
|
|
🔴 重要邮件:
|
|||
|
|
1. [工作] 来自 boss@company.com
|
|||
|
|
主题: 项目进度汇报 - 紧急
|
|||
|
|
时间: 09:30
|
|||
|
|
|
|||
|
|
2. [财务] 来自 finance@bank.com
|
|||
|
|
主题: 账单提醒
|
|||
|
|
时间: 08:15
|
|||
|
|
|
|||
|
|
📬 今日邮件分类:
|
|||
|
|
- 工作相关: 15 封
|
|||
|
|
- 订阅通知: 8 封
|
|||
|
|
- 社交媒体: 3 封
|
|||
|
|
- 其他: 2 封
|
|||
|
|
|
|||
|
|
💡 建议操作:
|
|||
|
|
- 回复 boss@company.com 的邮件
|
|||
|
|
- 处理 3 封需要审批的邮件
|
|||
|
|
|
|||
|
|
==========================================
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 安全提示
|
|||
|
|
|
|||
|
|
⚠️ **重要安全建议**:
|
|||
|
|
|
|||
|
|
1. **不要在脚本中明文保存密码**,优先使用 `--browser real` 模式复用已登录会话
|
|||
|
|
2. **敏感信息使用环境变量**存储
|
|||
|
|
3. **定期检查授权应用**,移除不需要的第三方访问
|
|||
|
|
4. **启用两步验证**保护邮箱安全
|
|||
|
|
5. **日志文件不要包含敏感信息**
|
|||
|
|
|
|||
|
|
## 故障排除
|
|||
|
|
|
|||
|
|
**登录失败?**
|
|||
|
|
```bash
|
|||
|
|
# 使用 headed 模式查看登录过程
|
|||
|
|
browser-use --browser real --headed open https://mail.google.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**页面元素找不到?**
|
|||
|
|
```bash
|
|||
|
|
# 等待页面完全加载
|
|||
|
|
sleep 5
|
|||
|
|
browser-use state
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**会话过期?**
|
|||
|
|
```bash
|
|||
|
|
# 关闭所有会话重新开始
|
|||
|
|
browser-use close --all
|
|||
|
|
browser-use --browser real open https://mail.google.com
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 清理
|
|||
|
|
|
|||
|
|
完成后记得关闭浏览器:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
browser-use close
|
|||
|
|
```
|