Sign inSign up

douliu676/mailplus

By douliu676

•Updated about 2 months ago

Image
0

1.2K

douliu676/mailplus repository overview

⁠MailPlus 管理系统

IMAP / Outlook 邮箱管理 · 卡密取件 · 代理系统 · 自托管后台

Vue Vite TypeScript Go PostgreSQL

Docker Hub Multi Arch Self Hosted Release

Docker 一键部署 · 多架构镜像 · 共用 PostgreSQL 多开 · 数据备份恢复


⁠✨ 特性

  • 🔐 卡密取件:生成卡密、绑定邮箱、限制次数、设置关键词和邮件天数过滤。
  • 📬 IMAP 邮箱管理:账号分组、批量导入、导出、测试、收件、发件、备注。
  • 📨 Outlook / Microsoft 邮箱管理:支持 OAuth 授权、批量导入、收件、导出和测试连接。
  • 🌐 代理系统:支持 HTTP、SOCKS5、VMess、VLESS,内置 xray 转换本地代理。
  • 🧾 使用日志:记录卡密、绑定邮箱、邮件标题、使用 IP 和使用时间。
  • 🧰 后台管理:仪表盘、用户管理、系统设置、个人资料、任务中心和备份导出。
  • 🐳 Docker 发布:前端、后端打包到同一个应用镜像,配合 PostgreSQL 一条命令启动。
  • 🔁 多开友好:支持普通独立多开,也支持多个应用共用一个 PostgreSQL 容器。
  • 🧱 多架构镜像:支持 linux/amd64、linux/arm64、linux/arm/v7。

⁠🚀 快速部署

⁠下载 compose 并启动

服务器已安装 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

⚠️ 首次登录会强制修改初始密码。

⁠📦 默认镜像

服务镜像
MailPlusdouliu676/mailplus:v1.0.1
PostgreSQLpostgres:18-alpine

MailPlus 已发布为多架构镜像,用户安装时 Docker 会根据设备类型自动选择:

linux/amd64
linux/arm64
linux/arm/v7

⁠🧾 版本说明

⁠v1.0.0
  • 卡密取件:生成卡密、绑定邮箱、限制次数、关键词过滤、邮件天数过滤。
  • IMAP 邮箱管理:账号分组、批量导入、导出、测试连接、收件、发件和备注。
  • Outlook / Microsoft 邮箱管理:OAuth 授权、批量导入、收件、导出和测试连接。
  • 代理系统:支持 HTTP、SOCKS5、VMess、VLESS,并通过内置 xray 转换为本地代理。
  • 后台能力:卡密日志、用户管理、系统设置、个人资料、任务中心和 Docker 一键部署。
  • 部署能力:支持普通独立多开和共用 PostgreSQL 多开,镜像支持 linux/amd64、linux/arm64、linux/arm/v7。
⁠v1.0.1
  • 数据库备份新增定时备份和手动备份,支持本地保存,也支持开启 WebDAV 后同步上传。
  • 备份保留份数默认改为 3 份,本地和 WebDAV 都会按保留份数清理。
  • 查看备份窗口支持显示文件名、文件大小、创建时间,并提供下载和删除操作。
  • 恢复备份完成后会自动重启程序,兼容开发模式、Docker 和 Windows 启动器。
  • WebDAV 测试连接和备份上传失败会进入任务中心显示,方便排查异常。
  • 代理切换会先测试节点,测试成功后再切换,并提示切换成功和延迟。

⁠🧰 常用命令

操作命令
启动./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 只在容器内部使用,不需要暴露到宿主机。

⁠共用 PostgreSQL 多开

如果想多个 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/accountsIMAP 邮箱管理
/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公开卡密取件

⁠🔌 主要 API

接口说明
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-accountsIMAP 邮箱账号管理
/api/admin/outlook-accountsOutlook / Microsoft 邮箱账号管理
/api/admin/proxy/*代理系统
/api/admin/card-keys卡密管理
/api/admin/card-key-logs卡密日志
/api/admin/users用户管理
/api/admin/settings系统设置
/api/admin/backup/export数据备份导出

⁠🗺️ 路线图

核心功能(已实现)

  • 🔐 卡密系统(分组 / 生成 / 绑定邮箱 / 次数限制 / 关键词过滤)
  • 📬 IMAP 邮箱管理(增 / 删 / 改 / 查 / 测试连接)
  • 📨 Outlook / Microsoft 邮箱管理(OAuth / 批量导入 / 收件 / 导出)
  • 📁 分组管理(树形分组 / 排序 / 状态筛选)
  • 📦 批量导入 / 导出 / 删除 / 移组
  • 📤 邮件发送(SMTP 发信)
  • 📥 邮件读取(实时收件 / 搜索 / HTML 渲染)
  • 🌐 代理系统(HTTP / SOCKS5 / VMess / VLESS / xray 转换)
  • 🧾 卡密日志(卡密 / 绑定邮箱 / 邮件标题 / IP / 时间)
  • 👤 用户管理(管理员 / 普通用户 / 启用禁用)
  • ⚙️ 系统设置(站点信息 / Logo / 备份 / 分页 / 日志清理)
  • 🧰 任务中心(导入导出任务 / 下载结果 / 清理结果)
  • 🐳 Docker 镜像发布(前端 + 后端 + 多架构镜像)
  • 🔁 多实例运行(同设备多开,端口和数据库隔离)
  • 🗄️ 共用 PostgreSQL 多开模板
  • 🔎 GitHub Releases 版本检查

计划中(欢迎 PR)

  • 🧭 更完整的首次安装向导
  • 🔑 更细的角色权限控制
  • 📚 更完整的 API 文档
  • 🧩 更多邮箱服务商预设
  • 🚀 自动化发布流水线

⚠️ 部署多套实例时,请确保前端宿主机端口和数据库名全部分开;否则会出现端口占用或数据混用。

⁠❓ 常见问题

⁠为什么有一个 db-init 容器是停止状态?

db-init 是数据库初始化容器,用来自动创建多开需要的数据库。它执行完就会退出,停止是正常现象。

⁠安装时会自动选择设备架构吗?

会。douliu676/mailplus 是多架构镜像,Docker 会根据服务器 CPU 自动拉取对应版本。

⁠可以用 postgres:latest 吗?

不建议。数据库大版本升级可能导致已有数据卷无法直接启动。默认使用 postgres:18-alpine,并且数据卷挂载在 /var/lib/postgresql。

⁠如何升级 MailPlus?

先修改 compose 里的镜像版本号,例如把 v1.0.0 改成 v1.0.1,然后执行:

docker compose pull
docker compose up -d

⁠⚠️ 免责声明

本项目仅用于学习、测试和管理自己拥有合法授权的邮箱资源。请勿用于未授权访问、垃圾邮件、撞库、绕过服务商限制或其他违法违规用途。使用本项目产生的风险和责任由使用者自行承担。

Tag summary

Content type

Image

Digest

sha256:4bc9e933c…

Size

106.1 MB

Last updated

about 2 months ago

docker pull douliu676/mailplus