1
0
Fork
You've already forked email-cli
0
No description
  • TypeScript 98.5%
  • CSS 1.3%
  • JavaScript 0.1%
Find a file
2026年06月30日 15:03:46 +08:00
frontend fix: resolve react doctor top issues 2026年06月30日 15:03:46 +08:00
references docs: add dashboard ad-hoc verification guide 2026年06月29日 10:16:15 +08:00
scripts fix: resolve react doctor top issues 2026年06月30日 15:03:46 +08:00
.dockerignore Add Docker deployment for email dashboard 2026年05月08日 01:24:31 +08:00
.env.example docs: update dashboard onboarding 2026年06月04日 14:19:13 +08:00
.gitignore fix(dashboard): recover interrupted agent chat streams 2026年06月01日 15:47:10 +08:00
bun.lock feat(dashboard): move mobile drafts into drawer 2026年06月04日 11:46:22 +08:00
docker-compose.yml.example feat(dashboard): add resilient agent chat 2026年05月09日 23:42:42 +08:00
Dockerfile Add Docker deployment for email dashboard 2026年05月08日 01:24:31 +08:00
eslint.config.js docs(dashboard): add draft-job stuck diagnosis, rewrite email-display boundary, update mobile nav refs 2026年06月04日 12:22:32 +08:00
package.json refactor: reorganize email-cli dashboard workspace 2026年04月23日 01:57:39 +08:00
README.md docs: update dashboard onboarding 2026年06月04日 14:19:13 +08:00
SKILL.md docs: add dashboard ad-hoc verification guide 2026年06月29日 10:16:15 +08:00
tsconfig.json docs(dashboard): add draft-job stuck diagnosis, rewrite email-display boundary, update mobile nav refs 2026年06月04日 12:22:32 +08:00

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