Files
email-unlimit/README.md
T

138 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Email Unlimited
Email Unlimited 是一个可自托管的临时邮箱服务,包含 Rust API/SMTP 服务、Vue 用户端和 React 管理后台。
## 技术栈
- 后端:Rust、Axum、SeaORM、Tokio
- 用户端:Vue 3、Pinia、Vue Router、Element Plus
- 管理端:React 19、TypeScript、Vite、TanStack Query、shadcn/ui
- 数据:MySQL / PostgreSQL / SQLite、Redis
- 部署:Docker Compose、Nginx
服务直接监听 SMTP 端口接收邮件,支持临时邮箱、WebSocket 推送、积分与每日额度、黑名单、灰名单、隔离区、正文 AES-GCM 加密和管理员接口。
## 本地开发
后端默认使用 `server/config/development.toml`
```powershell
cd server
cargo run
```
用户端和管理端均使用 pnpm
```powershell
cd frontend
pnpm install
pnpm dev
cd admin
pnpm install
pnpm dev
```
两个前端在开发模式下都通过 Vite 代理访问 `http://127.0.0.1:3000`。需要连接其他 API 时,可分别设置 `VITE_API_PROXY_TARGET`;生产构建连接独立 API 时使用:
```env
VITE_API_BASE_URL=http://localhost:3000
```
## Docker 部署
开发/内网部署:
先修改 `compose.env` 中所有 `CHANGE_ME` 配置,然后运行:
```powershell
docker compose up -d --build
```
用户端地址为 `http://localhost:8080`,管理端地址为 `http://localhost:8081`API 地址为 `http://localhost:3000`SMTP 监听宿主机 `25` 端口。
HTTPS 完整部署:
1. 修改 `compose.full.env` 中所有 `CHANGE_ME` 配置。
2. 修改 `nginx.full.conf` 中的域名与证书文件名。
3. 将证书放入 `certs/`
4. 启动服务。
```powershell
docker compose -f docker-compose.full.yml up -d --build
```
使用外部数据库时,复制 `compose.self.env.example``compose.self.env`,填写数据库连接后运行:
```powershell
docker compose -f docker-compose.self.yml up -d --build
```
生产环境会拒绝默认 JWT 密钥、通配 CORS,以及缺失或占位的 32 字节正文加密密钥。
## 首个管理员
新部署时,将 `AUTH__BOOTSTRAP_ADMIN_EMAIL` 设置为首个管理员邮箱,并为 `AUTH__INVITE_CODE` 设置至少 16 字符的随机值。服务启动后,用这两个值注册:
```powershell
$body = @{
email = "admin@example.com"
password = "replace-with-a-strong-password"
invite_code = "replace-with-the-configured-invite-code"
} | ConvertTo-Json
Invoke-RestMethod -Method Post `
-Uri "http://localhost:3000/auth/register" `
-ContentType "application/json" `
-Body $body
```
注册成功后即可登录管理端。已有管理员的部署可将 `AUTH__BOOTSTRAP_ADMIN_EMAIL` 留空。
普通用户通过用户端注册和登录。用户端支持创建/吊销邮箱、收信与 WebSocket 推送、附件下载、邮件删除、积分余额、今日额度与积分流水。每个邮箱使用独立 token;浏览器首次打开已有邮箱时会自动轮换并保存新 token。
## 积分规则
积分规则保存在数据库中,不使用 `CREDIT__*` 环境变量。首次启动会写入内置默认值,之后可在管理端的“积分规则”页面修改,保存后从下一次业务操作立即生效并跨容器重启保留。
| 规则 | 默认值 |
| ---- | ------ |
| 注册奖励 | 30 积分 |
| 每日签到 | 3 积分 |
| 奖励余额上限 | 90 积分 |
| 创建邮箱 | 2 积分/个 |
| 接收邮件 | 1 积分/封 |
| 每日邮箱上限 | 3 个 |
| 每日收信上限 | 20 封 |
所有邮箱创建和正常邮件接收从第一次开始扣分,不存在免费次数。删除邮件、吊销邮箱或自然过期不会返还积分和当日次数。隔离邮件在管理员放行时才占用次数并扣分。积分不可购买、转账、兑换或提现。
## DNS
用于接收邮件的域名至少需要:
| 类型 | 名称 | 值 |
| ---- | ------ | ------------------ |
| A | `mail` | 服务器公网 IP |
| MX | `@` | `mail.example.com` |
公网 SMTP 还需要开放 TCP 25,并根据实际域名调整 `server/config/production.toml``smtp.hostname``smtp.local_domains`
## 验证
```powershell
cd server
cargo test
cargo check
cd ..\frontend
pnpm build
cd ..\admin
pnpm build
```
## 许可证
MIT,详见 [LICENSE](LICENSE)。