Files
mailgo/docs/prd.md
T
2026-06-01 18:59:55 +08:00

6.3 KiB
Raw Blame History

PRD · MailGo 邮件系统

  • 项目名称mail_go
  • 编程语言Go
  • 核心依赖go-smtp / go-imap / go-pop3emersion 系列)+ Gin + html/template
  • 文档版本v0.1
  • 作者:许清楚(PM

一、原始需求

用 Go 语言开发一套完整的自托管邮件系统,包含 SMTP/IMAP/POP3 服务端、Web 管理后台(/admin)和用户邮箱界面(/),配置遵循 FHS 标准,支持 SQLite/MySQL 双数据库,支持 Linux 生产环境与 Windows 本地测试。


二、产品目标

  1. 可自托管的完整邮件服务:提供生产可用的 SMTP/IMAP/POP3 服务端,开箱即用,无需依赖第三方邮件服务商。
  2. 低门槛运维管理:通过 Web 管理后台完成域名配置、用户管理、DNS 指引,运维人员无需手动编辑配置文件。
  3. 标准化配置与数据存储:严格遵循 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_goWindows./win/srv/mail_go
P0-06 邮件持久化 收/发邮件元数据及正文存入数据库
P0-07 附件存储 附件保存至 /srv/mail_go/attachmentsWindows./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 SocketWindows 仅 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)

六、配置文件结构(参考)

# /etc/mail_go/config.toml

[database]
driver = "sqlite"          # sqlite | mysql
dsn    = "/srv/mail_go/mail.db"

[storage]
base_dir      = "/srv/mail_go"
attachments   = "/srv/mail_go/attachments"

[web]
listen = ":8080"           # TCP 端口或 Unix socket 路径(仅 Linux

[smtp]
port    = 25
tls_port = 465
cert    = ""
key     = ""

[imap]
port     = 143
tls_port = 993
cert     = ""
key      = ""

[pop3]
port     = 110
tls_port = 995
cert     = ""
key      = ""

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