SkimMail

English · Tiếng Việt · 中文

速览你的所有收件箱。一个轻量、自托管、以阅读为先的多账户邮件阅读器——以 IMAP 为核心 + Gmail/Outlook OAuth——打包为单个 Go 二进制并内嵌 React SPA。 无需任何外部服务

许可证: Business Source License 1.1(专有软件;2030 年转为 AGPL) · 安全: SECURITY.md · 文档: Wiki

下面写的都已经发布。 多账户邮件、按账户出口(egress)、规则与告警、通知、 备份与恢复、插件、远程访问和多用户角色都在当前版本里 —— AI Triage 是唯一一项 仍在路线图上的重要功能。逐版本细节见 CHANGELOG.md


功能

阅读

每个账户都有自己的出口

自动化与运维

安全与多用户

环境要求

只需 Docker —— 内置 SQLite,无需任何外部服务。 (从源码构建或参与贡献?见 README.dev.md。)


快速开始

无需源码 — 下载已发布的 compose 文件(它直接拉取预构建镜像):

curl -fsSLO https://lyquyduong.github.io/skimmail/docker-compose.yml
docker compose up -d      # → http://localhost:8080(SQLite + 文件系统)

或运行纯镜像(distroless + 非 root;数据在 /data 卷):

docker run -d --name skimmail -p 8080:8080 -v skimmail-data:/data \
  -e AUTH_MODE=passphrase ghcr.io/lyquyduong/skimmail:latest

一个镜像,一个软件包。 内嵌 WireGuard 出口,以及 PostgreSQL、MySQL 和 S3 支持 都在默认构建里 —— WireGuard 引擎是一个按 SHA256 固定的插件,你第一次添加隧道时由 SkimMail 自动下载,无需额外安装,也不必在两个镜像之间做选择。单独的 skimmail-wg 版本已于 1.7.0 停止发布;若你仍装着那个 apt 包,apt remove skimmail-wg 是安全的。

在 Ubuntu / Debian 上安装(apt)

curl -fsSL https://lyquyduong.github.io/skimmail/apt/skimmail.gpg \
  | sudo tee /usr/share/keyrings/skimmail.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/skimmail.gpg] https://lyquyduong.github.io/skimmail/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/skimmail.list
sudo apt update && sudo apt install skimmail      # 作为 systemd 服务运行 → http://localhost:8080

配置位于 /etc/default/skimmail;数据位于 /var/lib/skimmail日志写入 systemd journal(sudo journalctl -u skimmail -f轮转文件 /var/log/skimmail/skimmail.log —— 级别、轮转、清空与实时查看器Settings ▸ Logs。升级通过 apt upgrade。所有发布渠道(镜像、.deb、 apt 仓库)都从 GitHub 发布——见 DISTRIBUTION.md

首次登录

打开 http://localhost:8080。在让你创建任何东西之前,SkimMail 会先索取首次启动时 打印的一次性认领码 —— 它用来阻止先访问到端口的人抢先认领你的实例:

sudo journalctl -u skimmail | grep 'claim code'        # apt(需要 sudo:journal 仅 root 可读)
docker compose logs skimmail | grep 'claim code'       # docker compose(服务名;容器实际叫 skimmail-skimmail-1)
docker logs skimmail 2>&1 | grep 'claim code'          # docker run(仅当你像上面那样传了 --name skimmail)

丢失了?重新生成一个 —— 旧的随即失效:

sudo -u skimmail skimmail --data-dir /var/lib/skimmail claim-code --rotate

在封闭网络中,可用 SKIMMAIL_SKIP_CLAIM=1 直接跳过这道关卡。

随后,默认认证模式为 passphrase你第一次输入的密码会成为主口令 ——请牢记 (之后用它登录)。用户名留空。

添加邮箱账户

添加 IMAP 账户:邮箱 · host(如 imap.gmail.com) · 端口 993 · 安全 TLS · 应用专用密码

Gmail 可以使用应用专用密码(不是常规密码)——两次点击,无需 Cloud 项目。 Outlook.com 和 Hotmail 不行:Microsoft 不为个人账户签发应用专用密码,并已关闭 基本身份验证,因此这些邮箱必须使用 OAuth。

要启用“使用 Google/Microsoft 添加”按钮,请配置下方的 OAuth 凭据。要求公开的 BASE_URL——没有公网地址的实例通过粘贴浏览器最终跳转到的地址来完成登录。

点击 ↻ Sync(或等待后台轮询)。之后新邮件会通过 WebSocket 实时推送。


使用


配置

通过环境变量配置(12-factor)——见 .env.example。自 1.9.0 起,大多数 设置也可以直接在应用里(Settings)修改;用环境变量设定的值始终优先,并在那里显示 为锁定。完整参考——每个变量、各个配置层面,以及谁覆盖谁——见 wiki ▸ 配置

变量 默认 用途
AUTH_MODE passphrase passphrase(共享口令)或 users(具名账号 + 角色)。自 1.10.0 起 users 是真正的多用户:每人只拥有并看到自己的邮箱,角色为 owneroperatorviewer。用 skimmail user add 创建。还有第三个取值 none,它完全关闭认证;并且必须在进程环境中另外设置 SKIMMAIL_ALLOW_AUTH_NONE=1,因为 auth.mode 可以从界面和 CLI 写入,被盗用的会话不能凭自己就把整个实例降级为无认证。
DATA_DIR ./data SQLite 数据库、主密钥、blobs
LISTEN_ADDR :8080 监听地址
BASE_URL 公开 URL——OAuth 重定向流程、WebSocket 与 PWA 需要。没有它 OAuth 仍可通过粘贴流程使用。
TRUST_PROXY false 反向代理后信任 X-Forwarded-*
TRUSTED_PROXIES TRUST_PROXY=true 时,被视为代理跳的 CIDR 列表(逗号分隔;默认仅回环/私有网段)
TRUSTED_ORIGINS 额外允许的 CORS/CSRF 来源(逗号分隔)
BACKGROUND_POLL_INTERVAL 5m 每个账户的轮询兜底周期
MAX_CONCURRENT_SYNCS 4 同时同步的最大邮箱数
SYNC_RATE_PER_MIN 10 每分钟启动同步的次数上限(错峰)
SYNC_DEPTH_DAYS 30 邮件头同步窗口(0 = 全部历史)
GOOGLE_CLIENT_ID / _SECRET Gmail OAuth 应用(可选)
MICROSOFT_CLIENT_ID / _SECRET Outlook OAuth 应用(可选)

安全

凭据、OAuth 令牌与缓存的邮件正文均静态加密(AES-256-GCM)。首次登录由一次性认领码 把关。服务端实施登录限流 + 锁定、CSRF/Origin 校验、对外请求的 SSRF 防护、严格安全 响应头 + 沙箱邮件 iframe、由服务端强制的空闲锁屏,以及只追加的审计日志 (GET /api/audit)。完整安全姿态与漏洞报告方式见 SECURITY.md

卸载(完全移除)

卸载本身不会删除你的数据 —— 账户、邮件缓存和加密主密钥保存在 Docker 卷或 /var/lib/skimmail 中。下面标 ⚠ 的步骤会永久删除它们(没有备份就无法恢复)。

Docker Compose

docker compose down -v            # ⚠ 停止并删除容器以及数据卷
docker rmi ghcr.io/lyquyduong/skimmail:latest 2>/dev/null
rm docker-compose.yml             # 之前下载的 compose 文件

Docker(docker run

docker rm -f skimmail
docker volume rm skimmail-data    # ⚠ 全部数据
docker rmi ghcr.io/lyquyduong/skimmail:latest

APT(Ubuntu / Debian)

sudo apt purge skimmail           # 停止服务,删除二进制、systemd unit
                                  # 和 /etc/default/skimmail
sudo rm -rf /var/lib/skimmail     # ⚠ 数据 —— apt 有意保留
sudo rm -rf /var/log/skimmail     # 日志文件及轮转备份
sudo userdel skimmail             # 安装时创建的系统用户
# 移除之前添加的 APT 仓库 + 签名密钥:
sudo rm -f /etc/apt/sources.list.d/skimmail.list /usr/share/keyrings/skimmail.gpg
sudo apt update

手动二进制(tarball) —— 停止进程(或你自建的 systemd unit),然后删除二进制 及其数据目录(DATA_DIR,默认是二进制旁的 ./data)。

面向开发者

从源码构建、开发模式(热重载)、VS Code 配置、build tags、测试与项目结构都在 README.dev.md

许可证与版本层级

SkimMail 是专有软件。 采用 Business Source License 1.1 许可 (Licensor:Solutions101 (S101))。源代码为私有;仅向用户分发编译后的二进制。 SPDX:BUSL-1.1

三个层级

详情见 COMMERCIAL-TERMS.md;完整说明(英文 + 越南语)见 docs/LICENSING.md。许可证相关问题见 SECURITY.md

许可证转换(2030 年)

2030 年 7 月 23 日之后,SkimMail 将自动转为 AGPL-3.0-or-later。 在此日期之前,源代码仍为专有。

其他声明