架构设计
Mailez 采用模块化架构,清晰分离控制平面和邮件引擎。
整体架构
┌─────────────────────────────────────────────────────────┐
│ Frontend Layer │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Webmail │ │ Admin │ │ mailezine │ │
│ │ (Next.js) │ │ (Next.js) │ │ (单二进制) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Backend API (Go+Fiber) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ REST API │ │ Auth │ │ Directory │ │
│ │ (Fiber) │ │ (JWT/RBAC) │ │ Contract │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Archive │ │ DLP │ │ LDAP / SSO │ │
│ │ (归档) │ │ (审批) │ │ (目录集成) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Mail Engine Layer │
│ ┌──────────────────────────────────────────────────┐ │
│ │ Engine-Agnostic Directory Contract │ │
│ │ (/stack/directory/*) │ │
│ │ ┌────────────────────────────────────────────┐ │ │
│ │ │ mailezine │ │ │
│ │ │ (Single Go binary, all tiers) │ │ │
│ │ └────────────────────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Supporting Services │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Rspamd │ │ Unbound │ │ Redis │ │
│ │ (Spam Filter)│ │ (DNS/DoH) │ │ (Cache) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ ┌────────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ SQLite/MySQL/PG│ │ TiDB │ │ MinIO/S3 │ │
│ │ (控制面数据) │ │ (引擎 KV) │ │ (正文 blob) │ │
│ └────────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
核心组件
控制平面(Backend)
- 技术栈:Go + Fiber + GORM + Redis
- 职责:
- REST API 服务
- 用户认证与授权(JWT + RBAC)
- 目录契约管理(域名、邮箱、别名、通讯组)
- AD/LDAP 目录集成与 SSO
- 邮件归档(捕获 / 保留 / 审查 / 导出)
- 出站 DLP 规则与审批流
- 公告、审计日志、Webhook 回调
- 与邮件引擎的集成接口
前端应用
- Webmail:Next.js + Tailwind / Base UI + TipTap 富文本,面向终端用户
- Admin Console:Next.js + Tailwind / Base UI,面向管理员
- 特点:
- 响应式设计
- 国际化(i18n)
- PWA 离线支持
- 移动同步:Exchange ActiveSync(企业版)/ CardDAV / CalDAV
邮件引擎
Mailezine(唯一引擎,全部档位)
- 单二进制,全协议自研(SMTP / IMAP / POP3 / ManageSieve)
- 可插拔存储:Pebble(单机,开发/社区版)/ TiDB(分布式,企业版)+ MinIO/S3 blob
- 内嵌 FTS(bleve)+ Tika 附件文本提取;多活下经变更日志追踪每节点收敛
- 集群两形态(企业版):active-passive 租约容灾,或
multi档全服务 多活——任意副本服务任意账户、出站队列按消息认领、崩溃自动接管; 隐式 TLS(465/993/995) mailezine migrate将传统 Postfix+Dovecot(Maildir)架构的存量数据 单向迁入 KV 存储- 三平台(Linux / macOS / Windows)原生支持
- 共享基础设施组件:Rspamd(反垃圾扫描,社区版即可对接;企业版另启用自学习)、 Unbound(DNS/DoH)、nginx(HTTP/ACME 网关);未配置 Rspamd 时引擎内置基础 反垃圾(认证结果计分 + DNSBL + 黑白名单 + 可选灰名单),无需这些组件
目录契约
引擎无关的接口规范,定义在 /stack/directory/*:
- 域名管理
- 邮箱账户
- 别名配置
- 通讯组
- DKIM 密钥
- 中继设置
任何符合契约的邮件引擎都可以插入系统。
数据流
入站邮件
外部 SMTP → Engine:25 → 内置基础反垃圾(社区版)
↘ Rspamd 高级档(企业版) → Engine (存储)
↓
Archive (归档捕获) → IMAP/POP3/EAS 访问
社区版与 Rspamd 的关系:引擎内置的 internal/junk 基础档对认证结果
(SPF/DKIM/DMARC)、DNSBL 命中与黑白名单做保守计分,命中阈值即打
X-Spam 头交给用户 Sieve 规则分流,只有硬信号(黑名单、多重 DNSBL、
DMARC p=reject 失败叠加)才在 MTA 层拒绝。社区版同样可以配置
MAILEZINE_RSPAMD_URL 切换为 rspamd 扫描档(checkv2 判定、垃圾头注入、
拒收);企业版在此之上另启用统计学习与模糊哈希自学习
(MAILEZINE_RSPAMD_LEARN_URL)。
出站邮件
Webmail/Admin → Backend API → Engine (队列,入队时 DKIM 签名) → DLP (扫描/审批,企业版) → 外部 SMTP
管理操作
Admin Console → Backend API → 目录契约 → Engine (配置更新)
部署架构
单机部署(开发/小规模)
┌─────────────────────────────────────┐
│ Docker Compose │
│ ┌─────────┐ ┌─────────┐ │
│ │ Backend │ │ Webmail │ │
│ └─────────┘ └─────────┘ │
│ ┌─────────┐ ┌─────────┐ │
│ │ Admin │ │ Engine │ │
│ └─────────┘ └─────────┘ │
│ ┌─────────┐ ┌─────────┐ │
│ │ Rspamd │ │ Redis │ │
│ └─────────┘ └─────────┘ │
│ ┌─────────┐ ┌─────────────────┐ │
│ │ SQLite │ │ Pebble + FS │ │
│ └─────────┘ └─────────────────┘ │
└─────────────────────────────────────┘
分布式部署(生产/大规模)
┌──────────────┐ ┌──────────────┐
│ Backend │ │ Backend │ (多实例 + 负载均衡)
└──────────────┘ └──────────────┘
│ │
└────────┬───────┘
▼
┌──────────────┐
│ Redis │ (共享状态)
└──────────────┘
│
▼
┌──────────────┐
│ MySQL + TiDB │ (共享控制面数据 / 引擎 KV)
└──────┬───────┘
│
┌──────┴──────┐
▼ ▼
┌──────────────┐ ┌──────────────┐
│ Engine 1 │ │ Engine 2 │ (HA 租约 + MinIO/S3 blob)
└──────────────┘ └──────────────┘
安全设计
传输安全
- MTA-STS — 强制 TLS 传输
- DANE — DNS-based 证书验证
- DKIM — 出站邮件签名
- DMARC — 反伪造策略
认证安全
- JWT — 无状态令牌
- 两步验证 — TOTP 支持
- RBAC — 角色权限控制
- 应用令牌 — 第三方应用专用密码
- 登录限速 — 暴力破解防护
数据安全
- PGP — 端到端加密
- S/MIME — 证书签名与 CMS 加解密
- 远程图片拦截 — 防止追踪
- 附件扫描 — 恶意代码检测
- 审计日志 — 操作追踪
- 归档 + DLP 审批 — 合规留痕与出站管控
扩展性
水平扩展
- Backend API 无状态,可多实例部署(
mailezctl up ha;gateway 动态解析, 副本即加即用) - 定时发送原子认领:多副本并发不双发;副本崩溃认领自动回收
- 后台任务 DB 租约选主:仅持有者执行,leader 故障 60 秒自动接管
- 超大附件与云盘落 MinIO/S3,上传与下载可落在不同副本
- Redis 支持集群模式
- 引擎存储基于 TiDB KV + MinIO/S3,实例可横向扩展
- 多实例 HA 租约自动接管
垂直扩展
- 存储后端可插拔:Pebble(单机)/ TiDB(分布式)
- 数据库连接池优化
- 缓存策略调优
插件扩展
- 邮件引擎可插拔
- 存储后端可插拔
- 认证后端可扩展
监控与运维
健康检查
- Backend API:
/health - 邮件引擎:引擎特定端点
- 依赖服务:Redis、Rspamd
日志
- 结构化日志(JSON)
- 日志级别可调
- 集中日志收集(可选)
指标
- 健康端点与结构化日志(JSON)
- 队列深度、延迟、吞吐等运行指标
- 性能基准为内部实测(2026-08),见首页基准数据表
技术决策
详见各组件的决策文档: