shenjianZ 2fc223ef23 merge: integrate test environment deployment
# Conflicts:
#	backend/saveEmail.js
#	docker-compose.build.yml
#	docker-compose.full.yml
#	docker-compose.yml
#	frontend/src/i18n/index.js
#	frontend/src/views/Home.vue
2026-07-28 14:52:39 +08:00
2025-07-31 08:13:51 +08:00
2025-07-28 12:18:54 +08:00
2025-07-31 11:44:51 +08:00
2025-08-02 11:28:01 +08:00

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

cd server
cargo run

用户端和管理端均使用 pnpm

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 时使用:

VITE_API_BASE_URL=http://localhost:3000

Docker 部署

测试服务器使用宿主机 Nginx 提供静态文件和 HTTPS、使用阿里云 ACR 拉取 Rust 后端镜像时,请使用 deploy/README.md 中的独立部署方案。该方案适用于 test-mail.shenjianl.cnadmin-mail.shenjianl.cn,并与本地构建、上传前端静态文件的流程对应。

开发/内网部署:

先修改 compose.env 中所有 CHANGE_ME 配置,然后运行:

docker compose up -d --build

用户端地址为 http://localhost:8080,管理端地址为 http://localhost:8081API 地址为 http://localhost:3000SMTP 监听宿主机 25 端口。

HTTPS 完整部署:

  1. 修改 compose.full.env 中所有 CHANGE_ME 配置。
  2. 修改 nginx.full.conf 中的域名与证书文件名。
  3. 将证书放入 certs/
  4. 启动服务。
docker compose -f docker-compose.full.yml up -d --build

使用外部数据库时,复制 compose.self.env.examplecompose.self.env,填写数据库连接后运行:

docker compose -f docker-compose.self.yml up -d --build

生产环境会拒绝默认 JWT 密钥、通配 CORS,以及缺失或占位的 32 字节正文加密密钥。

首个管理员

新部署时,将 AUTH__BOOTSTRAP_ADMIN_EMAIL 设置为首个管理员邮箱,并为 AUTH__INVITE_CODE 设置至少 16 字符的随机值。服务启动后,用这两个值注册:

$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.tomlsmtp.hostnamesmtp.local_domains

验证

cd server
cargo test
cargo check

cd ..\frontend
pnpm build

cd ..\admin
pnpm build

许可证

MIT,详见 LICENSE

S
Description
No description provided
Readme MIT 18 MiB
Languages
TypeScript 54.5%
Rust 36.2%
JavaScript 3.6%
Vue 3.1%
CSS 2.2%
Other 0.4%