一阶段ok

This commit is contained in:
2026-06-01 18:59:55 +08:00
commit 9e50d05e71
52 changed files with 6155 additions and 0 deletions
+19
View File
@@ -0,0 +1,19 @@
# 2026-06-01 MailGo 项目开发完成
## 完成内容
- 完整Go邮件系统 MailGo 开发,通过2轮QA验证
- 核心组件: SMTP(go-smtp) + IMAP(go-imap v1) + POP3(手写TCP) + Web(Gin)
- Web功能: 登录认证、收件箱、草稿箱、发件箱、撰写邮件(含附件)、设置(修改密码)、管理后台(域名/用户/DNS提示)
- 模板架构从base继承模式经3轮迭代重构为自包含+子模板模式
- 默认管理员: admin@example.com / admin
- Windows测试路径: ./win/etc/mail_go + ./win/srv/mail_go
## QA结果
- Round 1: 12/15 通过,3项失败(/drafts和/settings路由缺失,/admin路径误测)
- Round 2: 12/12 全部通过,修复后回归验证完成
## 关键修复
- SMTP ListenAndServeTLS 签名问题 → 创建独立TLS Server实例
- IMAP v2 beta API不稳定 → 切换v1
- 模板 {{template .VarName .}} 不支持 → 重构为自包含模式
- 补充 /drafts、/settings 路由及密码修改功能
+24
View File
@@ -0,0 +1,24 @@
# MailGo 项目记忆
## 技术栈
- Go + Gin + html/template + GORM + SQLite(default)/MySQL
- SMTP: github.com/emersion/go-smtp
- IMAP: github.com/emersion/go-imap v1 (NOT v2 beta)
- POP3: 手写TCP协议实现
- 配置: TOML (github.com/BurntSushi/toml)
- 会话: github.com/gin-contrib/sessions (cookie store)
- 密码: golang.org/x/crypto/bcrypt
## 关键架构决策
- 模板采用自包含+子模板模式(Go html/template不支持变量模板名)
- 每个模板是完整HTML文档,通过 {{template "styles" .}} 和 {{template "navbar" .}} 引入公共部分
- Handler调用 c.HTML(200, "define_name", data)define_name 对应模板名
- SMTP TLS: 创建独立Server实例设置 TLSConfig
- Windows路径回退: ./win/etc/mail_go 和 ./win/srv/mail_go
- 默认管理员: admin@example.com / admin
## 已知坑
- go-imap v2 是betaAPI不稳定,必须用v1
- Go filepath.Glob 不支持 ** 递归匹配,模板分两轮加载
- SMTP ListenAndServeTLS() 不接受参数,TLS需通过 TLSConfig 设置
- User模型密码字段为 PasswordHash,数据库列为 password_hash
+69
View File
@@ -0,0 +1,69 @@
# MailGo 交付总览
## TL;DR
MailGo 邮件系统开发完成,包含 SMTP/IMAP/POP3 协议服务 + Gin Web 管理界面,2轮QA全部通过。
## 交付概览
- **状态**: ✅ 开发完成,QA验证通过
- **测试通过率**: 12/12 (Round 2)
- **已知问题**: 0
## 文件清单
### 配置
- `config/defaults.go` — 默认路径与端口常量(Linux/Windows双平台)
- `config/config.go` — TOML配置加载+自动补全
### 数据库
- `internal/db/models.go` — GORM模型(User/Domain/Message/Attachment
- `internal/db/db.go` — 数据库初始化(SQLite/MySQL + AutoMigrate
### Store层
- `internal/store/stores.go` — Stores聚合器
- `internal/store/user_store.go` — 用户CRUD + UpdatePassword
- `internal/store/mail_store.go` — 邮件CRUD + 文件夹查询
- `internal/store/domain_store.go` — 域名CRUD
- `internal/store/attachment_store.go` — 附件CRUD
### 附件存储
- `internal/storage/attachment.go` — UUID文件名+磁盘读写
### 协议服务
- `internal/smtp_server/server.go` — SMTP服务(go-smtp + TLS
- `internal/imap_server/server.go` — IMAP服务(go-imap v1
- `internal/imap_server/backend.go` — IMAP后端实现
- `internal/pop3_server/server.go` — POP3服务(手写TCP协议)
### Web服务
- `internal/web/server.go` — Gin引擎+路由+模板+会话
- `internal/web/middleware/auth.go` — 认证中间件
- `internal/web/middleware/admin.go` — 管理员中间件
- `internal/web/handlers/auth.go` — 登录/登出
- `internal/web/handlers/mail.go` — 收件箱/草稿/发件/撰写/查看/设置
- `internal/web/handlers/admin.go` — 管理后台(域名/用户/DNS提示)
### 模板(自包含+子模板模式)
- `internal/web/templates/base.html` — styles + navbar 子模板
- `internal/web/templates/login.html`
- `internal/web/templates/inbox.html`
- `internal/web/templates/drafts.html`
- `internal/web/templates/sent.html`
- `internal/web/templates/compose.html`
- `internal/web/templates/view.html`
- `internal/web/templates/settings.html`
- `internal/web/templates/admin/dashboard.html`
- `internal/web/templates/admin/domains.html`
- `internal/web/templates/admin/domain_form.html`
- `internal/web/templates/admin/dns_hint.html`
- `internal/web/templates/admin/users.html`
- `internal/web/templates/admin/user_form.html`
### 入口
- `main.go` — 配置加载→DB初始化→Store创建→默认数据→启动四大服务
## 用户下一步建议
1. `go run main.go` 启动服务,访问 http://localhost:8080
2. 默认管理员: admin@example.com / admin
3. 生产环境需修改 `mail_go.toml` 中的 session secret key
4. 配置 TLS 证书后启用 SMTP/IMAP/POP3 的 TLS 端口
5. 配置 DNS MX/SPF/DKIM/DMARC 记录(管理后台有提示页面)