跳到主要内容

架构设计

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),见首页基准数据表

技术决策

详见各组件的决策文档: