Skip to content

地址、文件夹与会话

地址

addresses 表是按用户隔离的:每个用户可以注册多个地址,其中恰有一个 主地址。删除主地址会自动把最早的剩余地址提升为主地址。

InitPage 不会创建任何地址——每个用户在登录后到 设置 → 地址 自行添加。

文件夹

每个用户都有以下 系统文件夹(始终存在,不可删除):

  • inbox 收件箱
  • sent 已发送
  • drafts 草稿箱
  • starred 虚拟文件夹:is_starred = 1 且不在 trash/spam 中的邮件
  • archive 归档
  • spam 垃圾邮件
  • trash 软删除回收站,可清空

自定义文件夹(folders 表)按 UUID 寻址,而不是按名称;删除自定义文件夹时, 其中邮件会回到 inbox

“移动到” 操作直接修改 messages.folder 的值。

会话(线程)

Lumen 在收到邮件时合成 thread_id:

  • In-Reply-To 时,以其作为 thread。
  • 否则取 References 的第一个 token。
  • 否则用本封邮件自己的 Message-ID 作为 thread 根。

发件回复会继承父邮件的 thread_id,因此回复链在数据库中保持连续。 当前前端按文件夹平铺展示,GET /api/threads/:threadId 已可查询同一会话所有邮件, 可作为后续会话视图的数据来源。

搜索

/api/messages?folder=…&q=…subjectpreviewfrom_addressto_addresses 上做 LIKE 查询。它不是全文索引——大邮箱建议改造为 D1 FTS5, 或交给一个独立的索引 Worker。

回收站语义

DELETE /api/messages/:id:

  • 邮件 不在 trash 时,会被移动到 trash(软删除)。
  • 已经在 trash 时,会硬删除:从 D1 删除行、从 R2 删除附件与原始 .eml

POST /api/messages/trash/empty 对当前用户的 trash 做批量硬删除。