PRD · MailGo 邮件系统
- 项目名称:mail_go
- 编程语言:Go
- 核心依赖:go-smtp / go-imap / go-pop3(emersion 系列)+ Gin + html/template
- 文档版本:v0.1
- 作者:许清楚(PM)
一、原始需求
用 Go 语言开发一套完整的自托管邮件系统,包含 SMTP/IMAP/POP3 服务端、Web 管理后台(/admin)和用户邮箱界面(/),配置遵循 FHS 标准,支持 SQLite/MySQL 双数据库,支持 Linux 生产环境与 Windows 本地测试。
二、产品目标
- 可自托管的完整邮件服务:提供生产可用的 SMTP/IMAP/POP3 服务端,开箱即用,无需依赖第三方邮件服务商。
- 低门槛运维管理:通过 Web 管理后台完成域名配置、用户管理、DNS 指引,运维人员无需手动编辑配置文件。
- 标准化配置与数据存储:严格遵循 FHS 目录规范,配置自动补全,支持 Linux/Windows 双环境,降低部署与迁移成本。
三、用户故事
| # |
角色 |
需求 |
价值 |
| US-1 |
系统管理员 |
通过 /admin 配置域名、端口和 TLS 证书 |
无需 SSH 手动改配置即可上线邮件服务 |
| US-2 |
系统管理员 |
创建/删除/修改域名下的邮件用户并设置附件配额 |
集中管理账户,控制存储资源占用 |
| US-3 |
普通用户 |
登录后在浏览器中收发邮件并上传附件 |
随时随地通过 Web 界面使用邮箱 |
| US-4 |
普通用户 |
用标准邮件客户端(IMAP/POP3/SMTP)连接账户 |
继续使用 Outlook、Thunderbird 等熟悉工具 |
| US-5 |
系统管理员 |
启动时配置文件缺失项自动补全,并在 /admin 查看 DNS 配置提示 |
减少初始化错误,快速完成 DNS 配置 |
四、功能需求池
P0 · 必须实现
| ID |
功能 |
说明 |
| P0-01 |
SMTP 服务端 |
基于 go-smtp,支持收信/转发,TLS 可配置 |
| P0-02 |
IMAP 服务端 |
基于 go-imap,支持标准 IMAP4 操作(文件夹、标记、搜索) |
| P0-03 |
POP3 服务端 |
基于 go-pop3,支持标准 POP3 收信 |
| P0-04 |
配置文件自动补全 |
启动时检查 /etc/mail_go/(Windows:./win/etc/mail_go/),缺失项写入默认值 |
| P0-05 |
数据库支持 |
默认 SQLite,可切换 MySQL;数据目录 /srv/mail_go(Windows:./win/srv/mail_go) |
| P0-06 |
邮件持久化 |
收/发邮件元数据及正文存入数据库 |
| P0-07 |
附件存储 |
附件保存至 /srv/mail_go/attachments(Windows:./win/srv/mail_go/attachments) |
| P0-08 |
默认 admin 账户 |
首次启动自动生成 admin 管理员账户 |
| P0-09 |
用户登录认证 |
Web 界面登录,Session 管理,未登录重定向 |
| P0-10 |
收件箱页面 |
邮件列表 + 邮件阅读(HTML/纯文本) |
| P0-11 |
撰写/发送邮件 |
支持附件上传,调用本地 SMTP 发送 |
| P0-12 |
Web 框架 |
Gin + html/template,/admin 仅管理员可访问 |
P1 · 应当实现
| ID |
功能 |
说明 |
| P1-01 |
发件箱页面 |
展示已发送邮件列表 |
| P1-02 |
域名管理(/admin) |
配置域名、SMTP/IMAP 端口、TLS 证书路径 |
| P1-03 |
用户管理(/admin) |
创建/删除/修改用户,设置附件空间配额(默认 5 GB) |
| P1-04 |
DNS 配置提示(/admin) |
展示 MX、SPF、DKIM、DMARC 记录的填写示例 |
| P1-05 |
Web 监听配置 |
支持 TCP 端口和 Unix Socket(Windows 仅 TCP) |
| P1-06 |
DKIM 签名 |
发信时自动附加 DKIM 签名 |
P2 · 有则更好
| ID |
功能 |
说明 |
| P2-01 |
邮件搜索 |
Web 界面关键词搜索收件箱 |
| P2-02 |
垃圾邮件过滤 |
基础规则过滤或集成第三方库 |
| P2-03 |
多域名支持 |
单实例托管多个邮件域名 |
| P2-04 |
邮件分组/标签 |
用户自定义文件夹或标签 |
| P2-05 |
操作审计日志 |
/admin 记录管理操作日志 |
五、关键 UI 页面描述
5.1 登录页(/login)
- 居中卡片:邮箱地址 + 密码输入框 + 登录按钮
- 登录失败提示错误信息
5.2 收件箱(/inbox)
- 左侧导航:收件箱 / 发件箱 / 撰写 / 退出
- 右侧主区:邮件列表(发件人、主题、时间、未读标记)
- 点击邮件展开正文,底部显示附件下载链接
5.3 撰写邮件(/compose)
- 表单:收件人、抄送(可选)、主题、正文(textarea)
- 附件上传按钮(支持多文件)
- 发送 / 存草稿 按钮
5.4 发件箱(/sent)
5.5 管理后台 - 域名配置(/admin/domains)
- 表格列:域名、SMTP 端口、IMAP 端口、TLS 状态、操作
- 新增/编辑弹层:域名、端口、证书路径输入框
- DNS 提示区:自动生成 MX / SPF / DKIM / DMARC 记录文本,可一键复制
5.6 管理后台 - 用户管理(/admin/users)
- 表格列:用户名、域名、配额、已用空间、状态、操作
- 新增/编辑弹层:用户名、密码、所属域名、附件配额(GB)
六、配置文件结构(参考)
Windows 测试时路径前缀替换为 ./win。
七、待确认问题(Open Questions)
| # |
问题 |
影响范围 |
| OQ-1 |
DKIM 私钥由系统自动生成还是管理员手动导入?影响 /admin 域名配置页交互设计 |
P1-02、P1-06 |
| OQ-2 |
是否需要支持邮件转发规则(Forward Rule)?影响 SMTP 服务端逻辑复杂度 |
P0-01 |
| OQ-3 |
附件大小上限由全局配置还是按用户配额单独限制? |
P0-07、P1-03 |
| OQ-4 |
Web 界面是否需要支持富文本(HTML)邮件撰写,还是纯文本即可? |
P0-11 |
| OQ-5 |
多域名(P2-03)是否纳入第一期范围?影响数据库 Schema 设计 |
P2-03 |
| OQ-6 |
是否需要 OAuth2 / 外部 LDAP 认证,还是仅本地账户? |
P0-09 |