SkimMail

English · Tiếng Việt · 中文

Lướt nhanh mọi hộp thư. Trình đọc email đọc-trước (read-first), đa tài khoản, tự host, nhẹ — lõi IMAP + OAuth Gmail/Outlook — đóng gói thành một file binary Go duy nhất nhúng sẵn React SPA. Không cần dịch vụ ngoài.

Giấy phép: Business Source License 1.1 (phần mềm độc quyền; chuyển sang AGPL năm 2030) · Bảo mật: SECURITY.md · Tài liệu: Wiki

Mọi thứ bên dưới đều đã phát hành. Mail đa tài khoản, egress riêng cho từng tài khoản, rules và cảnh báo, thông báo, sao lưu & khôi phục, plugin, remote access và đa người dùng — tất cả đã có trong bản hiện tại; AI Triage là tính năng lớn duy nhất còn nằm trong roadmap. Chi tiết từng bản phát hành: CHANGELOG.md.


Tính năng

Đọc

Mỗi tài khoản một đường ra riêng

Tự động hoá & vận hành

Bảo mật & đa người dùng

Yêu cầu

Chỉ cần Docker — SQLite tích hợp sẵn, không cần dịch vụ ngoài. (Build từ mã nguồn hoặc đóng góp? Xem README.dev.md.)


Bắt đầu nhanh

Không cần mã nguồn — tải file compose đã publish (nó pull sẵn image dựng sẵn):

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

Hoặc chạy image thuần (distroless + non-root; dữ liệu ở volume /data):

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

Một image, một gói. WireGuard egress nhúng, PostgreSQL, MySQL và S3 đều nằm trong bản build mặc định — engine WireGuard là một plugin ghim SHA256 mà SkimMail tự tải lần đầu bạn thêm tunnel, nên không phải cài thêm gì và không phải chọn image thứ hai. Bản riêng skimmail-wg đã ngừng từ 1.7.0; nếu bạn còn gói apt đó, apt remove skimmail-wg là an toàn.

Cài trên 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      # chạy như systemd service → http://localhost:8080

Cấu hình ở /etc/default/skimmail; dữ liệu ở /var/lib/skimmail; log nằm trong systemd journal (sudo journalctl -u skimmail -f) file xoay vòng tại /var/log/skimmail/skimmail.log — level, xoay vòng, truncate và trình xem realtime nằm ở Settings ▸ Logs. Nâng cấp qua apt upgrade. Mọi kênh phát hành (image, .deb, apt repo) đều ship từ GitHub — xem DISTRIBUTION.md.

Đăng nhập lần đầu

Mở http://localhost:8080. Trước khi cho bạn tạo bất cứ thứ gì, SkimMail hỏi một mã claim dùng một lần đã in ra lúc khởi động đầu tiên — đây là thứ ngăn người truy cập trước chiếm mất instance của bạn:

sudo journalctl -u skimmail | grep 'claim code'        # apt (cần sudo: journal chỉ root đọc được)
docker compose logs skimmail | grep 'claim code'       # docker compose (tên service; container thật tên skimmail-skimmail-1)
docker logs skimmail 2>&1 | grep 'claim code'          # docker run (chỉ chạy nếu bạn đã truyền --name skimmail như trên)

Mất mã? Tạo mã thay thế — mã cũ hết hiệu lực:

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

Trên mạng kín, bạn có thể bỏ hẳn cổng này bằng SKIMMAIL_SKIP_CLAIM=1.

Sau đó, chế độ auth mặc định là passphrase: mật khẩu bạn nhập lần đầu tiên sẽ trở thành passphrase chính — hãy nhớ nó (dùng để đăng nhập lại). Để trống ô username.

Thêm tài khoản mail

Thêm tài khoản IMAP: email · host (vd imap.gmail.com) · port 993 · bảo mật TLS · app password.

Gmail dùng được app password riêng (không phải mật khẩu thường) — hai cú bấm, không cần Cloud project. Outlook.com và Hotmail thì không: Microsoft không cấp app password cho tài khoản cá nhân và đã tắt xác thực cơ bản, nên những hộp thư đó buộc phải dùng OAuth.

Muốn bật nút "Thêm bằng Google/Microsoft", hãy đặt OAuth credentials bên dưới. Không bắt buộc phải có BASE_URL công khai — instance không có thì hoàn tất đăng nhập bằng cách dán địa chỉ mà trình duyệt đáp xuống.

Bấm ↻ Sync (hoặc đợi poll nền). Sau đó mail mới đẩy về thời gian thực qua WebSocket.


Sử dụng


Cấu hình

Cấu hình qua biến môi trường (12-factor) — xem .env.example. Từ 1.9.0 phần lớn thiết lập cũng sửa được ngay trong app (Settings), và giá trị đặt bằng biến môi trường luôn thắng, hiện ở đó dưới dạng khoá. Tham chiếu đầy đủ — mọi biến, các mặt phẳng cấu hình và thứ gì đè lên thứ gì — nằm ở wiki ▸ Cấu hình.

Biến Mặc định Mục đích
AUTH_MODE passphrase passphrase (một mật khẩu chung) hoặc users (tài khoản có tên + phân quyền). Từ 1.10.0 users là đa người dùng thật: mỗi người sở hữu hộp thư của mình và không thấy của người khác, vai trò là owner, operator hoặc viewer. Tạo bằng skimmail user add. Còn một giá trị thứ ba, none, tắt hẳn xác thực; nó đòi thêm SKIMMAIL_ALLOW_AUTH_NONE=1 trong environment của tiến trình, vì auth.mode ghi được từ cả UI lẫn CLI nên một phiên bị chiếm không được phép tự hạ cấp cả instance.
DATA_DIR ./data SQLite DB, master key, blobs
LISTEN_ADDR :8080 địa chỉ lắng nghe
BASE_URL URL công khai — cần cho flow OAuth redirect, WebSocket và PWA. Không có nó OAuth vẫn chạy qua flow dán tay.
TRUST_PROXY false tin X-Forwarded-* sau reverse proxy
TRUSTED_PROXIES danh sách CIDR (phân tách dấu phẩy) được tin là chặng proxy khi TRUST_PROXY=true (mặc định: chỉ loopback/private)
TRUSTED_ORIGINS origin được phép thêm cho CORS/CSRF (phân tách dấu phẩy)
BACKGROUND_POLL_INTERVAL 5m chu kỳ poll dự phòng cho mọi account
MAX_CONCURRENT_SYNCS 4 số mailbox đồng bộ cùng lúc tối đa
SYNC_RATE_PER_MIN 10 số lượt sync khởi động mỗi phút (stagger)
SYNC_DEPTH_DAYS 30 cửa sổ sync header (0 = toàn bộ lịch sử)
GOOGLE_CLIENT_ID / _SECRET OAuth app Gmail (tùy chọn)
MICROSOFT_CLIENT_ID / _SECRET OAuth app Outlook (tùy chọn)

Bảo mật

Credential, token OAuth và nội dung thư đã cache được mã hoá at-rest (AES-256-GCM). Lần đăng nhập đầu tiên bị chặn bởi mã claim dùng một lần. Server áp rate-limit + lockout đăng nhập, kiểm tra CSRF/Origin, chống SSRF cho fetch ra ngoài, security headers nghiêm ngặt + iframe email cô lập, khoá màn hình khi rảnh do server cưỡng chế, và audit log append-only (GET /api/audit). Xem SECURITY.md để biết tư thế bảo mật đầy đủ và cách báo lỗ hổng.

Gỡ cài đặt (xoá hoàn toàn)

Bản thân việc gỡ cài đặt không xoá dữ liệu — tài khoản, cache mail và master key mã hoá nằm trong Docker volume hoặc /var/lib/skimmail. Các bước đánh dấu ⚠ bên dưới xoá chúng vĩnh viễn (không khôi phục được nếu không có backup).

Docker Compose

docker compose down -v            # ⚠ dừng + xoá container VÀ volume dữ liệu
docker rmi ghcr.io/lyquyduong/skimmail:latest 2>/dev/null
rm docker-compose.yml             # file compose đã tải về

Docker (docker run)

docker rm -f skimmail
docker volume rm skimmail-data    # ⚠ toàn bộ dữ liệu
docker rmi ghcr.io/lyquyduong/skimmail:latest

APT (Ubuntu / Debian)

sudo apt purge skimmail           # dừng service, xoá binary, unit systemd
                                  # và /etc/default/skimmail
sudo rm -rf /var/lib/skimmail     # ⚠ dữ liệu — apt cố tình giữ lại
sudo rm -rf /var/log/skimmail     # file log + các bản đã xoay
sudo userdel skimmail             # system user được tạo lúc cài
# gỡ repo APT + key đã thêm:
sudo rm -f /etc/apt/sources.list.d/skimmail.list /usr/share/keyrings/skimmail.gpg
sudo apt update

Binary thủ công (tarball) — dừng tiến trình (hoặc unit systemd bạn tự tạo), rồi xoá binary và thư mục dữ liệu (DATA_DIR, mặc định ./data cạnh binary).

Cho lập trình viên

Build từ mã nguồn, chế độ dev (hot reload), thiết lập VS Code, build tags, tests và bố cục dự án nằm ở README.dev.md.

Giấy phép & các bậc

SkimMail là phần mềm độc quyền (proprietary). Được cấp phép theo Business Source License 1.1 (Licensor: Solutions101 (S101)). Mã nguồn là private; chỉ binary đã build được phân phối cho người dùng. SPDX: BUSL-1.1.

Ba bậc (tier)

Chi tiết: COMMERCIAL-TERMS.md. Giải thích đầy đủ (EN + VI): docs/LICENSING.md. Thắc mắc về giấy phép: xem SECURITY.md.

Chuyển đổi giấy phép (2030)

Sau ngày 23/07/2030, SkimMail sẽ tự động chuyển sang AGPL-3.0-or-later. Trước ngày đó, mã nguồn vẫn là độc quyền.

Ghi chú khác