2026-06-14 01:07:48 +08:00
|
|
|
|
# LanQin Email
|
|
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|

|
|
|
|
|
|

|
|
|
|
|
|

|
|
|
|
|
|

|
|
|
|
|
|

|
|
|
|
|
|

|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
自建邮箱 Webmail 全栈方案。前端 React + shadcn/ui,后端 Go + SQLite,默认单容器集成 Postfix、Dovecot、Rspamd。
|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
## 特性
|
|
|
|
|
|
|
|
|
|
|
|
- **Webmail 客户端** — 文件夹管理、邮件读写、附件、搜索、标签、星标、规则过滤
|
|
|
|
|
|
- **多域名/多邮箱** — 域名管理、DKIM 签名、DNS 记录检测、邮箱别名转发
|
|
|
|
|
|
- **双因素认证** — TOTP 两步登录(兼容 Google Authenticator / Authy)
|
|
|
|
|
|
- **管理员面板** — 用户/域名/邮箱/别名/邮件管理、系统设置、邮件模板
|
|
|
|
|
|
- **用户自助** — 开放注册、自助申请邮箱、黑名单、收件规则、联系人
|
|
|
|
|
|
- **单容器部署** — 一个容器跑通 API + Web + Nginx + Postfix + Dovecot + Rspamd
|
|
|
|
|
|
- **本地投递** — 开发环境系统内邮箱互发直接写入 Inbox,无需公网邮件栈
|
|
|
|
|
|
|
|
|
|
|
|
## 快速开始
|
|
|
|
|
|
|
|
|
|
|
|
### 开发
|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-06-16 10:45:58 +08:00
|
|
|
|
# 后端
|
2026-06-14 01:07:48 +08:00
|
|
|
|
cd apps/api
|
|
|
|
|
|
go mod tidy
|
|
|
|
|
|
go test ./...
|
|
|
|
|
|
go run ./cmd/server
|
|
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
# 前端(新终端)
|
2026-06-14 01:07:48 +08:00
|
|
|
|
cd apps/web
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
默认管理员:`admin@lanqin.local`,密码通过 `LANQIN_ADMIN_PASSWORD` 设置(不设置则启动时随机生成并输出到日志)。
|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
### 部署
|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
服务器只需要 Compose 文件和配置,不需要源码构建:
|
2026-06-15 00:57:34 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd deploy
|
|
|
|
|
|
cp .env.example .env
|
2026-06-15 22:38:40 +08:00
|
|
|
|
# 修改 .env 里的域名和管理员密码
|
|
|
|
|
|
docker compose pull
|
|
|
|
|
|
docker compose up -d
|
2026-06-15 00:57:34 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
单容器内部集成:API、Web、Nginx、Postfix、Dovecot、Rspamd。
|
2026-06-15 00:57:34 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
## 架构
|
2026-06-15 22:38:40 +08:00
|
|
|
|
|
|
|
|
|
|
```
|
2026-06-16 10:45:58 +08:00
|
|
|
|
┌─────────────────────────────────────────────────┐
|
|
|
|
|
|
│ Docker 容器 │
|
|
|
|
|
|
│ ┌──────┐ ┌────────┐ ┌──────┐ ┌──────────┐ │
|
|
|
|
|
|
│ │ API │ │ Web │ │Nginx │ │ Postfix │ │
|
|
|
|
|
|
│ │ Go │ │ React │ │反代 │ │ MTA │ │
|
|
|
|
|
|
│ └──┬───┘ └────────┘ └──────┘ └────┬─────┘ │
|
|
|
|
|
|
│ │ SQLite Maildir │ │
|
|
|
|
|
|
│ └──────────────────────────────────┘ │
|
|
|
|
|
|
│ ┌────────┐ ┌──────────┐ │
|
|
|
|
|
|
│ │Dovecot │ │ Rspamd │ │
|
|
|
|
|
|
│ │ IMAP │ │ 反垃圾 │ │
|
|
|
|
|
|
│ └────────┘ └──────────┘ │
|
|
|
|
|
|
└─────────────────────────────────────────────────┘
|
2026-06-15 00:57:34 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
数据流:
|
|
|
|
|
|
1. **收件** → Postfix 接收 → Dovecot 写入 Maildir → API worker 同步到 SQLite → Webmail 展示
|
|
|
|
|
|
2. **发件** → Webmail 编辑 → API 构造 MIME → Postfix 投递
|
|
|
|
|
|
3. **反垃圾** → Rspamd 在 Postfix 投递前评分,标记 Spam 文件夹
|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
## 能力
|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
| 模块 | 功能 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| 认证 | 登录/注册、会话管理、双因素 TOTP、Turnstile 人机验证 |
|
|
|
|
|
|
| 域名 | 多域名管理、DKIM 密钥生成、DNS 记录展示与检测 |
|
|
|
|
|
|
| 邮箱 | 邮箱账号管理、容量配额、密码同步 |
|
|
|
|
|
|
| Webmail | 文件夹、邮件列表、阅读、写信、附件、搜索、已读/未读、星标、移动、删除、标签 |
|
|
|
|
|
|
| 规则 | 收件规则(条件+动作)、发件人黑名单 |
|
|
|
|
|
|
| 联系人 | 个人通讯录管理 |
|
|
|
|
|
|
| 管理 | 用户/域名/邮箱/别名 CRUD、系统设置持久化、邮件模板编辑、SMTP 测试 |
|
|
|
|
|
|
| 清理 | 归档已读、清空回收站/垃圾邮件 |
|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
## 收发说明
|
2026-06-14 01:07:48 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
- **开发环境**:系统内邮箱互发直接投递到对方 Inbox。未配置 `LANQIN_SMTP_HOST` 时外部收件人不会真正投递。
|
|
|
|
|
|
- **服务器部署**:`.env` 默认 `LANQIN_SMTP_HOST=127.0.0.1`,发件交给同容器内 Postfix。
|
|
|
|
|
|
- **收件同步**:Postfix/Dovecot 收到 Maildir 后,API 的 Maildir worker 同步到 SQLite 后展示。
|
|
|
|
|
|
- **公网收发**:需要正确配置 MX/SPF/DKIM/DMARC,并确认云厂商开放 25/587/993 端口。
|
2026-06-15 22:19:24 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
## 要求
|
2026-06-15 23:41:21 +08:00
|
|
|
|
|
2026-06-16 10:45:58 +08:00
|
|
|
|
- Go 1.22+
|
|
|
|
|
|
- Node.js 20+
|
|
|
|
|
|
- Docker & Docker Compose(部署)
|