IMAP / Outlook 邮箱管理 · 卡密取件 · 代理系统 · 自托管后台
Docker 一键部署 · 多架构镜像 · 共用 PostgreSQL 多开 · 数据备份恢复
linux/amd64、linux/arm64、linux/arm/v7。服务器已安装 Docker 和 Docker Compose 后执行:
mkdir -p MailPlus
cd MailPlus
curl -L -o docker-compose.yml https://raw.githubusercontent.com/douliu676/MailPlus/main/docker-compose.yml
curl -L -o .env.example https://raw.githubusercontent.com/douliu676/MailPlus/main/.env.example
curl -L -o start-docker.sh https://raw.githubusercontent.com/douliu676/MailPlus/main/start-docker.sh
chmod +x start-docker.sh
./start-docker.sh
如果服务器没有 curl,可以用 wget:
mkdir -p MailPlus
cd MailPlus
wget -O docker-compose.yml https://raw.githubusercontent.com/douliu676/MailPlus/main/docker-compose.yml
wget -O .env.example https://raw.githubusercontent.com/douliu676/MailPlus/main/.env.example
wget -O start-docker.sh https://raw.githubusercontent.com/douliu676/MailPlus/main/start-docker.sh
chmod +x start-docker.sh
./start-docker.sh
start-docker.sh 会自动创建 .env。如果数据库密码为空或仍是 CHANGE_ME_STRONG_PASSWORD,脚本会自动生成随机强密码并写入 .env。
如果你要自定义数据库密码,先编辑 .env:
POSTGRES_DB=mail_admin
POSTGRES_USER=mail_admin
POSTGRES_PASSWORD=你的强密码
TZ=Asia/Shanghai
然后可以直接运行:
docker compose up -d
访问地址:
http://服务器IP:4399
默认后台账号:
admin / admin123
⚠️ 首次登录会强制修改初始密码。
| 服务 | 镜像 |
|---|---|
| MailPlus | douliu676/mailplus:v1.0.1 |
| PostgreSQL | postgres:18-alpine |
MailPlus 已发布为多架构镜像,用户安装时 Docker 会根据设备类型自动选择:
linux/amd64
linux/arm64
linux/arm/v7
linux/amd64、linux/arm64、linux/arm/v7。| 操作 | 命令 |
|---|---|
| 启动 | ./start-docker.sh |
| 重新构建并启动 | ./start-docker.sh --build |
| 查看容器 | docker compose ps |
| 查看日志 | docker compose logs -f |
| 重启 | docker compose restart |
| 停止 | docker compose down |
| 拉取新镜像 | docker compose pull |
| 更新并重启 | docker compose pull && docker compose up -d |
MailPlus 支持两种多开方式:
| 方式 | 说明 | 适合场景 |
|---|---|---|
| 普通多开 | 每套应用配一套 PostgreSQL | 隔离最清楚,适合普通用户 |
| 共用 PostgreSQL 多开 | 多个应用共用一个 PostgreSQL 容器,每套用不同数据库名 | 节省容器数量,适合熟悉 Docker 的用户 |
默认 docker-compose.yml 是普通单开版本,包含:
mail
mail-postgres
需要改端口时,只改冒号左边的宿主机端口:
ports:
- "4399:4399"
例如把前端宿主机端口改成 4499:
ports:
- "4499:4399"
后端 4400 只在容器内部使用,不需要暴露到宿主机。
如果想多个 MailPlus 共用一个 PostgreSQL 容器,下载多开模板:
mkdir -p MailPlus
cd MailPlus
curl -L -o docker-compose.shared-postgres.yml https://raw.githubusercontent.com/douliu676/MailPlus/main/docker-compose.shared-postgres.yml
docker compose -f docker-compose.shared-postgres.yml up -d
共用 PostgreSQL 多开也需要 .env 里的 POSTGRES_PASSWORD。如果没有 .env,可以先从 .env.example 复制一份并填写强密码。
默认仍然是单开,只启用:
mail
mail-postgres
mail-shared-postgres-db-init-1
mail-shared-postgres-db-init-1 是数据库初始化容器,执行完成后显示停止是正常的。
多开时取消注释 app_1、app_2,并确认这些内容不重复:
| 配置 | 示例 |
|---|---|
| 容器名 | mail、mail_1、mail_2 |
| 前端宿主机端口 | 4399、4499、4599 |
| 数据库名 | mail_admin、mail_admin_1、mail_admin_2 |
共用 PostgreSQL 时不要复制这些内容:
postgres
mail-postgres
postgres_data
单开默认数据库名是 mail_admin。
推荐在后台页面使用:
.dump 文件,包含当前数据库结构、数据和序列。Docker 版和 Windows 版的完整备份文件可以互相恢复。PostgreSQL 的用户名和密码可以不同,只要目标程序当前配置的数据库账号有权限清理和导入对象即可。
如果需要手动使用命令行备份,默认账号和数据库名都是 mail_admin:
mkdir -p backup
docker exec mail-postgres pg_dump -U mail_admin -d mail_admin -Fc > backup/mail_admin_$(date +%Y%m%d_%H%M%S).dump
cat backup/mail_admin_20260615_234500.dump | docker exec -i mail-postgres pg_restore -U mail_admin -d mail_admin --clean --if-exists
其中 20260615_234500 换成你真实备份文件名里的时间。
查看已有备份:
ls backup
恢复最新一个 mail_admin 备份:
cat $(ls -t backup/mail_admin_*.dump | head -n 1) | docker exec -i mail-postgres pg_restore -U mail_admin -d mail_admin --clean --if-exists
默认不再提供数据库弱口令。首次部署时建议使用 start-docker.sh:
chmod +x start-docker.sh
./start-docker.sh
脚本会创建 .env,并在密码为空或仍是占位值时自动生成随机强密码。
也可以手动创建或编辑 .env:
POSTGRES_DB=mail_admin
POSTGRES_USER=mail_admin
POSTGRES_PASSWORD=请改成强密码
TZ=Asia/Shanghai
然后启动:
docker compose up -d
如果 .env 里没有有效的 POSTGRES_PASSWORD,直接运行 docker compose up -d 会失败。这是为了避免默认弱口令。
已经初始化过的 PostgreSQL 数据卷不会因为修改 .env 自动改旧密码。生产环境建议首次启动前就设置好强密码。
| 层 | 技术 |
|---|---|
| 🎨 前端 | Vue 3、Vite、TypeScript、Tailwind CSS、Vue Router |
| 🧠 请求状态 | TanStack Vue Query |
| 🧩 图标 | lucide-vue-next |
| ⚙️ 后端 | Go 1.26、Gin、Ent |
| 🗄️ 数据库 | PostgreSQL 18 |
| 🔐 认证 | bcrypt、服务端会话 |
| 🌐 代理 | xray core |
| 🐳 容器 | Docker、Docker Compose、Buildx |
MailPlus/
├─ docker-compose.yml 普通单开部署文件
├─ docker-compose.shared-postgres.yml 共用 PostgreSQL 的多开模板
├─ .env.example 环境变量模板
├─ .env 实际生效配置,部署时使用
├─ start-docker.sh Linux 启动脚本,可自动生成数据库强密码
├─ Dockerfile Docker 镜像构建文件
├─ frontend-server.js 容器内前端静态服务
├─ start.sh 容器启动脚本
├─ houduan/ Go 后端源码
└─ qianduan/ Vue 前端源码
flowchart LR
U[用户浏览器] --> F[Vue 前端 4399]
F -->|/api| B[Go Gin 后端 4400]
F -->|公开卡密页面| P[PublicMail 页面]
P -->|/api/public/mail| B
B --> DB[(PostgreSQL)]
B --> IMAP[IMAP / SMTP 邮箱服务]
B --> MS[Outlook / Microsoft 邮箱]
B --> XR[xray 本地代理核心]
XR --> NET[外部代理节点]
sequenceDiagram
participant Admin as 管理员
participant Web as 前端后台
participant API as Go 后端
participant DB as PostgreSQL
participant Mail as 邮箱服务
participant User as 取件用户
Admin->>Web: 导入邮箱账号并创建卡密
Web->>API: 保存邮箱、分组、卡密规则
API->>DB: 写入账号、卡密和过滤配置
User->>Web: 打开卡密取件链接
Web->>API: 请求取件
API->>DB: 校验卡密、绑定邮箱、次数和冷却规则
API->>Mail: 拉取邮件并过滤
API->>DB: 写入使用记录和卡密日志
API-->>Web: 返回邮件内容
Web-->>User: 展示取件结果
构建并推送多架构镜像:
docker buildx build \
--platform linux/amd64,linux/arm64,linux/arm/v7 \
-t douliu676/mailplus:v1.0.1 \
-t douliu676/mailplus:latest \
--push .
检查镜像架构:
docker buildx imagetools inspect douliu676/mailplus:v1.0.1
docker buildx imagetools inspect douliu676/mailplus:latest
看到下面三个平台就表示正常:
linux/amd64
linux/arm64
linux/arm/v7
| 路径 | 说明 |
|---|---|
/home | 首页 |
/login | 登录页 |
/admin/dashboard | 仪表盘 |
/admin/accounts | IMAP 邮箱管理 |
/admin/outlook-accounts | 微软邮箱管理 |
/admin/proxy-system | 代理系统 |
/admin/card-keys | 卡密系统 |
/admin/card-key-logs | 卡密日志 |
/admin/users | 用户管理 |
/admin/settings | 系统设置 |
/imap/mail/ | IMAP 快速取件 |
/outlook/mail/ | Outlook 快速取件 |
/mail/keys=:cardKey | 公开卡密取件 |
| 接口 | 说明 |
|---|---|
GET /api/health | 健康检查 |
POST /api/auth/login | 登录 |
GET /api/settings/public | 公开站点设置 |
GET /api/public/mail/:key | 读取卡密公开信息 |
POST /api/public/mail/:key/messages | 公开卡密取件 |
GET /api/public/mail/:key/all | 纯文本公开取件 API |
GET /api/admin/update-check | 检查 GitHub Releases 最新版本 |
/api/admin/mail-accounts | IMAP 邮箱账号管理 |
/api/admin/outlook-accounts | Outlook / Microsoft 邮箱账号管理 |
/api/admin/proxy/* | 代理系统 |
/api/admin/card-keys | 卡密管理 |
/api/admin/card-key-logs | 卡密日志 |
/api/admin/users | 用户管理 |
/api/admin/settings | 系统设置 |
/api/admin/backup/export | 数据备份导出 |
核心功能(已实现)
计划中(欢迎 PR)
⚠️ 部署多套实例时,请确保前端宿主机端口和数据库名全部分开;否则会出现端口占用或数据混用。
db-init 是数据库初始化容器,用来自动创建多开需要的数据库。它执行完就会退出,停止是正常现象。
会。douliu676/mailplus 是多架构镜像,Docker 会根据服务器 CPU 自动拉取对应版本。
不建议。数据库大版本升级可能导致已有数据卷无法直接启动。默认使用 postgres:18-alpine,并且数据卷挂载在 /var/lib/postgresql。
先修改 compose 里的镜像版本号,例如把 v1.0.0 改成 v1.0.1,然后执行:
docker compose pull
docker compose up -d
本项目仅用于学习、测试和管理自己拥有合法授权的邮箱资源。请勿用于未授权访问、垃圾邮件、撞库、绕过服务商限制或其他违法违规用途。使用本项目产生的风险和责任由使用者自行承担。
Content type
Image
Digest
sha256:4bc9e933c…
Size
106.1 MB
Last updated
about 2 months ago
docker pull douliu676/mailplus