架构设计
SirrChat 采用模块化架构,提供灵活、可扩展的邮件服务器解决方案。
整体架构
┌─────────────────────────────────────────────┐
│ 客户端层 │
│ (Thunderbird, Outlook, 移动应用) │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 协议层 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ SMTP │ │ IMAP │ │Submission│ │
│ └─────────┘ └─────────┘ └─────────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 认证层 │
│ ┌──────────┐ ┌─────┐ ┌─────┐ ┌──────┐ │
│ │Blockchain│ │LDAP │ │ PAM │ │Custom│ │
│ └──────────┘ └─────┘ └─────┘ └──────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 处理层 │
│ ┌─────────┐ ┌──────┐ ┌─────────┐ │
│ │ Filter │ │Modify│ │ Check │ │
│ │ (Sieve)│ │(DKIM)│ │(SPF/etc)│ │
│ └─────────┘ └──────┘ └─────────┘ │
└──────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────┐
│ 存储层 │
│ ┌──────────┐ ┌────────────┐ │
│ │ Database │ │ Storage │ │
│ │(PG/MySQL)│ │(Local/S3) │ │
│ └──────────┘ └────────────┘ │
└─────────────────────────────────────────────┘核心组件
协议处理器
SMTP 服务器
- 接收和发送邮件
- 支持 STARTTLS 加密
- 实现速率限制和反垃圾邮件措施
IMAP 服务器
- 邮件存储和检索
- 文件夹管理
- 邮件搜索功能
- 支持 IDLE 推送通知
Submission 服务器
- 邮件提交(端口 587)
- 强制认证
- 自动 DKIM 签名
认证模块
区块链认证
go
type BlockchainAuth struct {
networks map[string]RPCClient
cache *AuthCache
}
func (b *BlockchainAuth) Verify(address, signature, message string) bool {
// 1. 恢复签名者地址
// 2. 验证地址匹配
// 3. 检查时间戳有效性
return verified
}LDAP 认证
- 支持 Active Directory
- 组织单元(OU)映射
- 属性同步
PAM 认证
- 系统账户集成
- 支持各种 PAM 模块
消息处理流水线
收到邮件 → 反垃圾检查 → 病毒扫描 → 过滤规则
↓
存储到数据库 ← DKIM签名 ← 内容修改 ← 用户规则存储系统
数据库层
- 用户数据: 账户信息、配额、设置
- 邮件元数据: 发件人、收件人、主题、时间
- 索引: 快速搜索和检索
文件存储
- Maildir格式: 每封邮件一个文件
- 压缩: 自动压缩旧邮件
- S3兼容: 可扩展到云存储
数据流
发送邮件流程
1. 客户端连接 (SMTP/Submission)
↓
2. 认证验证
↓
3. 接收邮件内容
↓
4. 验证收件人
↓
5. 应用过滤规则
↓
6. DKIM 签名
↓
7. 队列处理
↓
8. 发送到目标服务器接收邮件流程
1. 外部服务器连接
↓
2. SPF/DKIM/DMARC 检查
↓
3. 反垃圾邮件检查
↓
4. 应用用户规则(Sieve)
↓
5. 存储到数据库
↓
6. 保存邮件文件
↓
7. 通知客户端(IMAP IDLE)模块系统
核心模块
- auth: 认证提供商
- storage: 存储后端
- filter: 邮件过滤
- modify: 内容修改
- check: 验证检查
扩展点
go
type Module interface {
Name() string
Init(config Config) error
Process(ctx Context, msg *Message) error
}性能优化
并发模型
- 协程池: 处理并发连接
- 异步IO: 非阻塞网络操作
- 批量处理: 数据库批量操作
缓存策略
- 认证缓存: 减少区块链 RPC 调用
- 用户数据缓存: 常用数据内存缓存
- DNS缓存: 减少 DNS 查询
连接池
- 数据库连接池: 复用数据库连接
- RPC连接池: 区块链节点连接复用
安全设计
多层防护
- 网络层: TLS 加密
- 认证层: 多因素认证支持
- 应用层: 输入验证、SQL注入防护
- 数据层: 静态数据加密
速率限制
- 连接速率: 防止连接滥用
- 发送速率: 防止垃圾邮件
- 认证尝试: 防止暴力破解
可扩展性
水平扩展
┌─────────────┐
│Load Balancer│
└──────┬──────┘
│
┌─────────┼─────────┐
▼ ▼ ▼
┌──────┐ ┌──────┐ ┌──────┐
│ Node │ │ Node │ │ Node │
│ 1 │ │ 2 │ │ 3 │
└───┬──┘ └───┬──┘ └───┬──┘
│ │ │
└─────────┼─────────┘
▼
┌────────────────┐
│ Shared Storage│
│ (Database/S3) │
└────────────────┘组件分离
- 独立部署: SMTP、IMAP 可单独扩展
- 共享存储: 多实例共享数据
- 负载均衡: 智能流量分配
监控和日志
指标收集
- 系统指标: CPU、内存、磁盘
- 应用指标: 邮件吞吐量、延迟
- 业务指标: 用户活跃度、存储使用
日志系统
应用日志 → 结构化输出 → 日志聚合 → 分析平台
(ELK/Loki)高可用性
故障转移
- 主从复制: 数据库主从配置
- 自动切换: 健康检查和自动故障转移
- 数据备份: 定期备份和恢复测试
健康检查
go
type HealthCheck struct {
Database bool
SMTP bool
IMAP bool
Storage bool
}更多技术细节: