# 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)。