- TypeScript 98.5%
- CSS 1.3%
- JavaScript 0.1%
Email Dashboard
一个用于管理多邮箱未读邮件、AI 摘要、Agent 邮件问答和邮件草稿的本地 Web Dashboard。项目使用 Bun + Elysia 提供后端 API,React + Vite 提供前端界面。
快速启动:Docker Compose
从新机器或服务器部署时,推荐使用 Docker Compose。
git clone <repo-url>
cd email-cli
cp .env.example .env
cp docker-compose.yml.example docker-compose.yml
# 编辑 .env,至少修改 DASHBOARD_PASSWORD
docker compose up -d --build
默认访问地址:
http://localhost:3210
如果要改宿主机端口,在 .env 中设置:
DASHBOARD_HOST_PORT=3210
登录账号来自 .env:
DASHBOARD_USERNAME=admin
DASHBOARD_PASSWORD=change-me-to-a-strong-password
必填配置
.env 中至少需要配置:
DASHBOARD_USERNAME=admin
DASHBOARD_PASSWORD=your-strong-password
DASHBOARD_PASSWORD 请务必改成强密码。
可选:Docker build 代理
Docker build 不会自动继承当前终端的代理环境变量。如果本机代理只监听 127.0.0.1:7890,可以在 .env 中配置:
DOCKER_BUILD_NETWORK=host
DOCKER_BUILD_HTTP_PROXY=http://127.0.0.1:7890
DOCKER_BUILD_HTTPS_PROXY=http://127.0.0.1:7890
如果不需要代理,可以保持为空或默认值。
可选:Hermes AI 服务
如果需要使用 Hermes 生成摘要、草稿或 Agent 邮件问答,配置:
HERMES_BASE_URL=http://host.docker.internal:8642
HERMES_API_KEY=
如果 Dashboard 运行在 Docker 内、Hermes Agent 运行在宿主机上,并且希望 Agent 能调用本仓库里的 mail-cli.ts,建议额外设置宿主机上的仓库绝对路径:
DASHBOARD_MAIL_AGENT_WORKDIR=/absolute/path/to/email-cli
不配置 Hermes 时,Dashboard 仍可启动,但 AI 摘要、草稿和 Agent 问答能力会受限。
可选:Dashboard 行为
# 是否自动触发摘要;设为 0 可关闭
DASHBOARD_AUTO_SUMMARY=1
# 启动/同步未读邮件时的默认日期窗口
DASHBOARD_UNREAD_SYNC_DAYS=30
# 是否记录 /api/* 请求日志;设为 0 可关闭
DASHBOARD_REQUEST_LOGS=1
数据持久化
当前 docker-compose.yml.example 使用:
./.demo-data:/app/.demo-data # Dashboard SQLite 数据库等运行数据
email-dashboard-secrets:/app/.secrets # 兼容旧 secrets.json 迁移/挂载路径
Dashboard 的主数据库位于 .demo-data/dashboard.sqlite。通过后台添加的邮箱账号配置会写入 SQLite 的 mail_account_secrets 表;旧的 secrets.json 只作为迁移/兼容路径使用。
因此:
docker compose down不会删除.demo-data/里的 SQLite 数据。docker compose down -v会删除 named volume(例如email-dashboard-secrets),但不会删除 bind mount 的.demo-data/。- 如果确实要清空 Dashboard 数据,需要在确认备份后手动删除
.demo-data/。
常用命令
查看运行状态:
docker compose ps
查看日志:
docker compose logs -f email-dashboard
重启服务:
docker compose restart email-dashboard
更新代码并重新构建:
git pull
docker compose up -d --build
停止服务:
docker compose down
停止并删除 named volumes:
docker compose down -v
注意:down -v 会删除 named volumes,但不会删除 bind-mounted 的 .demo-data/。删除 .demo-data/ 会清空 Dashboard SQLite 数据,请谨慎操作。
本地开发
如果不使用 Docker,可以直接用 Bun 运行:
bun install
bun run frontend:build
bun run ./scripts/dashboard-demo.ts --host 0.0.0.0 --port 3210
常用校验:
bun run frontend:lint
bun run frontend:build
bun test scripts/*.test.ts
邮件 CLI 可通过 package script 或直接入口运行:
bun run cli -- search --limit 5
bun run ./scripts/mail-cli.ts search --limit 5
敏感文件
以下文件不应提交到仓库:
.env
.env.*
scripts/secrets.json
scripts/google_token.json
scripts/client_secret.json
.demo-data/
.tmp/
web-articles/
请使用模板文件:
.env.example
docker-compose.yml.example