场景 31:邮件系统 (Email System)
从 localStorage 模拟邮件,演进到企业级邮箱服务。
V1 — 1 个用户:纯前端模拟邮件
Section titled “V1 — 1 个用户:纯前端模拟邮件”你想做一个邮件客户端原型,模拟收发邮件的界面和交互。
你要解决什么
Section titled “你要解决什么”- 邮件对象存 localStorage(to/from/subject/body/time/read)
- 收件箱和发件箱列表视图
- 写邮件:填写收件人、主题、正文,“发送”存到发件箱
- 模拟收件:预置一些邮件数据,标记已读/未读
给 AI 的 Prompt
Section titled “给 AI 的 Prompt”用 React + Tailwind 构建邮件客户端原型。左侧导航:收件箱(未读计数)、发件箱、草稿箱。邮件列表显示发件人/主题/时间/已读状态,点击查看邮件详情。写邮件:收件人、主题、正文,点击”发送”存入 localStorage 发件箱。预置 5 封收件(模拟不同发件人),支持标记已读/未读、删除。邮件搜索:按主题和正文搜索。所有数据存 localStorage。
- 收件箱显示预置邮件列表
- 未读邮件数量正确标记
- 写邮件后出现在发件箱
- 搜索可以找到匹配邮件
- 刷新页面数据不丢失
你学到了什么
Section titled “你学到了什么”- 列表/详情交互模式 → Module 1
- 数据模型设计(邮件对象)→ Module 2
- 客户端搜索实现 → Module 2
V2 — 10 个用户:真实邮件发送
Section titled “V2 — 10 个用户:真实邮件发送”需要真正发送邮件到真实邮箱,同时在数据库记录所有邮件。
你要解决什么
Section titled “你要解决什么”- SMTP 发送真实邮件(通过外部 SMTP 服务)
- SQLite 存储发送记录
- 收件箱 API:列表、详情、标记已读
- 邮件发送状态追踪(发送中/成功/失败)
给 AI 的 Prompt
Section titled “给 AI 的 Prompt”用 Go + Gin + GORM + SQLite 构建邮件后端。模型:Email(from、to、subject、body_html、body_text、status、sent_at、read)、Account(邮箱、SMTP配置)。用 net/smtp 包发送邮件,SMTP 配置从环境变量读取(SMTP_HOST、SMTP_PORT、SMTP_USER、SMTP_PASS)。发送邮件 API:验证收件人格式,异步发送(goroutine),立即返回 pending 状态,发送完成后更新为 sent 或 failed。收件箱 API:分页列表、邮件详情、标记已读、搜索。
- 发送邮件后对方真实收到
- 发送记录存入数据库
- 发送失败状态正确标记
- 收件箱列表分页正常
- 标记已读状态持久化
你学到了什么
Section titled “你学到了什么”- SMTP 协议基础 → Module 3
- 异步任务处理(goroutine)→ Module 4
- 邮件格式(HTML/纯文本)→ Module 3
V3 — 100 个用户:完整收发
Section titled “V3 — 100 个用户:完整收发”需要不仅能发邮件,还能收取外部邮件,支持附件和全文搜索。
你要解决什么
Section titled “你要解决什么”- IMAP 收取邮件(连接外部邮箱)
- 迁移到 PostgreSQL
- 附件存储:上传到本地文件系统
- 全文搜索:PostgreSQL tsvector
给 AI 的 Prompt
Section titled “给 AI 的 Prompt”迁移到 PostgreSQL。添加 IMAP 收取功能:用 go-imap 库连接邮箱服务器,定时(每 5 分钟)拉取新邮件存入数据库。附件处理:解析邮件 MIME 部分,附件存到 ./attachments/ 目录,Attachment 表关联邮件(文件名、大小、MIME类型、路径)。全文搜索:Email 表添加 search_vector 列(tsvector),对 subject 和 body_text 建 GIN 索引,搜索 API 用 ts_query 匹配。邮件列表按文件夹分类(inbox/sent/trash/archive)。
- 定时拉取新邮件到收件箱
- 带附件的邮件正确解析和存储
- 附件可以下载且内容正确
- 全文搜索可以找到邮件内容
- 邮件在不同文件夹间移动
你学到了什么
Section titled “你学到了什么”- IMAP 协议和邮件解析 → Module 5
- MIME 多部分解析 → Module 5
- PostgreSQL 全文搜索 → Module 6
V4 — 1000 个用户:异步发送与模板
Section titled “V4 — 1000 个用户:异步发送与模板”大量邮件发送需要排队处理,失败需要重试,业务需要邮件模板。
你要解决什么
Section titled “你要解决什么”- 消息队列处理邮件发送(Redis List 或专用队列)
- 失败重试机制:指数退避,最多 3 次
- 邮件模板引擎:变量替换,HTML 模板
- 发送限速:防止被 SMTP 服务器封禁
给 AI 的 Prompt
Section titled “给 AI 的 Prompt”实现异步邮件发送。发送请求存入 Redis List(JSON:邮件ID + 尝试次数 + 下次重试时间)。Worker goroutine 从队列消费:发送成功更新状态为 sent,失败则尝试次数+1,延迟时间 = 2^n 分钟(指数退避),放回队列。超过 3 次标记为 failed 并通知用户。发送限速:每秒最多 5 封(Redis 令牌桶)。模板系统:EmailTemplate 表(名称、subject模板、body模板、变量列表),用 Go text/template 渲染,API:模板 CRUD、预览、用模板发送(传入变量值)。
- 邮件通过队列异步发送
- 发送失败自动重试(延迟递增)
- 超过重试次数标记为失败
- 发送速度不超过限制
- 模板渲染变量替换正确
你学到了什么
Section titled “你学到了什么”- 消息队列模式 → Module 7
- 指数退避重试 → Module 8
- 模板引擎设计 → Module 9
- 令牌桶限速 → Module 8
V5 — 1 万用户:反垃圾邮件
Section titled “V5 — 1 万用户:反垃圾邮件”收到的邮件中有大量垃圾邮件,需要自动识别和过滤。
你要解决什么
Section titled “你要解决什么”- SPF/DKIM 验证:检查发件人身份合法性
- 垃圾邮件评分:基于规则的评分系统
- 自定义过滤规则:用户可以创建过滤规则
- 黑白名单管理
给 AI 的 Prompt
Section titled “给 AI 的 Prompt”实现反垃圾邮件系统。SPF 检查:收到邮件时解析发件人域名的 SPF 记录(DNS TXT),验证发送服务器 IP 是否在允许列表。DKIM 检查:验证邮件头中的 DKIM-Signature。垃圾邮件评分(0-10分):SPF 失败 +3,DKIM 失败 +3,正文含可疑关键词(加载关键词表)+1/词,纯图片无文本 +2,过多链接 +1。评分 > 5 进垃圾箱。FilterRule 表(用户、条件JSON、动作:archive/delete/label),条件支持:from_contains、subject_contains、has_attachment。收到邮件时按用户规则执行。黑名单/白名单按发件人域名或地址管理。
- SPF 失败的邮件被标记
- 高分邮件自动进垃圾箱
- 自定义规则正确执行
- 白名单邮件跳过垃圾检测
- 用户可以将误判邮件标记为非垃圾
你学到了什么
Section titled “你学到了什么”- SPF/DKIM 邮件认证 → Module 10
- 规则引擎设计模式 → Module 9
- 评分系统设计 → Module 11
V6 — 10 万+ 用户:企业邮箱
Section titled “V6 — 10 万+ 用户:企业邮箱”企业需要自有域名邮箱,组织架构管理,邮件组和归档合规。
你要解决什么
Section titled “你要解决什么”- 多域名支持:一个系统服务多个企业域名
- 组织架构:部门树,成员管理,角色权限
- 邮件组(Distribution List):发到组地址自动转发给所有成员
- 归档合规:所有邮件保留 N 年,管理员可审计
给 AI 的 Prompt
Section titled “给 AI 的 Prompt”实现企业邮箱系统。Domain 表(域名、MX记录状态、SPF/DKIM配置)。Organization 表(名称、域名、管理员),Department 表(组织、名称、父部门),员工关联部门和角色(admin/manager/member)。MailGroup 表(地址如 [email protected]、成员列表),收到发给 MailGroup 的邮件时复制分发给所有成员。归档:所有邮件自动复制到 archive 表(不可删除),管理员可按时间/人员/关键词搜索归档邮件,保留策略可配置(默认 7 年)。管理后台:域名验证向导、组织管理、存储用量、安全审计。
- 自定义域名邮件正确收发
- 组织架构支持多层部门
- 邮件组转发给所有成员
- 归档邮件无法被普通用户删除
- 管理员可以审计搜索归档
你学到了什么
Section titled “你学到了什么”- 多租户架构设计 → Module 12
- 邮件路由与分发 → Module 5
- 合规归档需求 → Module 13
- 组织架构建模 → Module 12