Commit Graph

80 Commits

Author SHA1 Message Date
killerprojecte 3eebc1c358 fix: delete label without mailboxId caused 404 error on non-default mailbox 2026-06-22 21:08:11 +08:00
killerprojecte c8dff253cc chore: optimize code 2026-06-22 20:20:44 +08:00
killerprojecte 77187e76ce fix: wrong code syntax 2026-06-22 20:12:56 +08:00
killerprojecte 84cc47e3cf chore: revert some wrong changes 2026-06-22 20:04:11 +08:00
killerprojecte 8d29dbd126 chore: improve label status handling 2026-06-22 20:04:11 +08:00
killerprojecte 94ab94eceb chore: improve label error handling 2026-06-22 20:04:10 +08:00
killerprojecte 74f456ef7d chore: improve tag delete 2026-06-22 20:04:10 +08:00
killerprojecte 7720b6b404 feat: better tag system & fix layout problem when width under 640px 2026-06-22 20:04:09 +08:00
LanQin_ 0b982a5ff4 feat(mail): 重构邮箱权限体系并细化前台能力控制
- 新增邮箱前台权限与默认普通用户权限迁移,拆分读信、发信、草稿、定时、整理、标签、附件、联系人等能力。
- 收紧后端路由与处理逻辑,按权限限制邮箱前台、个人中心和定时发送相关接口。
- 前端根据权限动态隐藏或禁用邮件、个人中心中的对应功能入口与操作。
- 补充权限迁移与访问控制测试,覆盖普通用户邮箱前台、发信和定时发送的权限校验。
2026-06-22 15:54:15 +08:00
LanQin_ 5571dcc511 fix(app): 清理旧版系统权限组
- 将旧版默认权限组 ID 纳入清理列表,确保初始化时自动删除遗留数据。
- 补充测试验证旧版权限组会在默认权限组修复流程中被移除。
2026-06-22 15:02:25 +08:00
LanQin_ acdf298811 fix(permission): 调整默认权限组与用户权限继承
- 将“普通用户”权限组纳入默认权限继承,创建和更新用户时自动合并其权限。
- 放宽“普通用户”系统组的可编辑性,但仍禁止删除;继续限制超级管理员组被修改。
- 更新管理端权限组操作状态,避免对不可删除或不可编辑项提供错误入口。
- 补充相关测试,覆盖默认权限组编辑、删除与用户权限继承场景。
2026-06-22 14:42:37 +08:00
LanQin_ 8cbcc22a74 refactor(permissions): 精简默认权限组初始化逻辑
- 将固定默认权限组收敛为基础组,并新增对历史默认权限组的清理流程。
- 兼容保留已被用户引用的旧权限组,避免误删现有授权关系。
- 更新测试以覆盖新权限组创建与旧权限组迁移场景。
2026-06-22 14:34:57 +08:00
LanQin_ 31435c1e97 feat(admin): 引入细粒度权限组管理
- 新增权限目录、系统权限组与用户权限组分配,后台路由改为按权限粒度控制。
- 支持创建、编辑、查看和删除自定义权限组,并为用户绑定权限组。
- 前端后台界面按权限动态展示菜单与操作项,补充用户/权限组相关类型与交互。
2026-06-22 14:31:10 +08:00
LanQin_ e35b0985ee ci(.github/workflows): 扩展 AI PR Review 触发方式
- 新增 `issue_comment` 和 `workflow_dispatch` 触发入口,支持通过评论或手动指定 PR 运行审查。
- 调整并发键与权限配置,兼容多事件场景并补充 `issues: write`。
- 收紧执行条件,仅在仓库内 PR、手动触发或授权评论指令下执行,并按事件类型动态注入 `PR_NUMBER` 与 `PR_HEAD_SHA`。
2026-06-22 14:12:48 +08:00
LanQin 002c097def ci(.github): 自动生成并发布 GitHub Release
- 新增 `.github/release.yml`,统一分类发布说明中的变更类型。
- 扩展 Docker 发布工作流,生成基于 tag 的发布说明并创建或更新 GitHub Release。
- 同步补充镜像列表、使用文档和回退逻辑,提升发布信息完整性。
2026-06-21 02:49:06 +08:00
LanQin e7e4f43691 ci(.github/workflows): 拆分 CI 与发布流程。
Docker Release / Check web and api (push) Waiting to run
Docker Release / Resolve release tag (push) Blocked by required conditions
Docker Release / Build and publish all-in-one (push) Blocked by required conditions
Docker Release / Build and publish api (push) Blocked by required conditions
Docker Release / Build and publish web (push) Blocked by required conditions
Docker Release / Build and publish dovecot (push) Blocked by required conditions
Docker Release / Build and publish postfix (push) Blocked by required conditions
Docker Release / Build and publish rspamd (push) Blocked by required conditions
- 新增独立的 CI 工作流,覆盖前端检查、构建和后端测试。
- 调整 Docker 工作流为仅负责标签发布与镜像构建。
- 同步优化管理页 Issues 图标颜色。
v0.1.1
2026-06-21 02:30:01 +08:00
LanQin c872ed559d feat(admin): 增加关于页与发布版本信息
- 在系统设置中新增“关于”标签页,提供版本、仓库、Issues、文档和开源协议入口。
- 通过 Docker 构建参数注入版本号与发布链接,并在前端展示当前发布版本。
- 调整 GitHub Actions 与镜像构建流程,仅在 tag 发布时构建并发布带版本标识的镜像。
2026-06-21 02:23:40 +08:00
LanQin 99fe3cc57c feat(mail): 重构邮件详情元信息展示
CI and Docker / Check web and api (push) Waiting to run
CI and Docker / Build and publish all-in-one (push) Blocked by required conditions
CI and Docker / Build and publish api (push) Blocked by required conditions
CI and Docker / Build and publish web (push) Blocked by required conditions
CI and Docker / Build and publish dovecot (push) Blocked by required conditions
CI and Docker / Build and publish postfix (push) Blocked by required conditions
CI and Docker / Build and publish rspamd (push) Blocked by required conditions
- 抽离 `MessageMetaPanel` 统一展示发件人、收件人、抄送、密送和时间信息。
- 补充地址解析与列表渲染,提升详情页信息完整度和可读性。
v0.1.0
2026-06-21 01:51:05 +08:00
LanQin 7e4599ae00 Merge branch 'main' of https://github.com/LanQin996/LanQin-Email 2026-06-21 01:04:17 +08:00
LanQin d586cc25b5 docs(README): 补充项目许可证说明。
- 新增 `LICENSE` 文件,声明为 MIT 许可证。
- 在 `README.md` 中加入 `License` 小节并链接到许可证文件。
2026-06-21 01:04:11 +08:00
LanQin_ 4b0e30e1d0 Merge pull request #2 from LanQin996/feat/mobile-responsive
feat(web): 优化移动端响应式体验
2026-06-21 00:19:43 +08:00
LanQin 936d3c4819 style(web): 统一移动端视口与编辑器样式
- 将邮件、个人中心与规则弹窗从 `100dvh` 调整为 `h-svh`,减少移动端视口抖动。
- 优化邮件正文编辑器的基础布局与滚动样式,提升输入区可用性。
- 移除 `protected-layout` 中切换路由时自动关闭移动侧栏的逻辑。
2026-06-21 00:02:30 +08:00
LanQin 41386363df ci(.github/workflows): 支持配置 AI 审查推理参数
- 为 AI PR 审查流程新增 `OPENAI_REASONING_EFFORT` 和 `OPENAI_REASONING_SUMMARY` 可选环境变量。
- 允许通过仓库变量调整推理强度与摘要输出。
2026-06-20 23:57:06 +08:00
LanQin a8513120e5 refactor(web): 优化侧边栏与邮件展示交互
- 关闭移动端侧边栏在路由切换后的残留打开状态。
- 补充 `SheetContent` 的可访问性描述配置,避免无效告警。
- 统一邮件收件人渲染的空值处理,防止数组为空时异常。
- 渲染纯文本邮件内容时转义 HTML,提升展示安全性。
2026-06-20 23:52:59 +08:00
LanQin 3ce17d97dc chore(github): 增加 PR AI 代码审查流程并调整 CI 触发范围
- 新增 `.github/ai-review.md` 与 `.ai-reviewignore`,用于约束 AI 审查规则和忽略生成产物。
- 新增 `.github/workflows/ai-pr-review.yml`,在 PR 上自动运行 AI 审查并支持按配置跳过。
- 调整 `.github/workflows/docker.yml`,将 PR 触发范围收敛到 `main` 分支。
2026-06-20 23:18:22 +08:00
LanQin cee9f7aaa0 feat(mail): 优化写信编辑器移动端布局
- 调整正文容器与编辑区的伸缩关系,提升弹窗内滚动与内容填充体验。
- 精简并重排工具栏,优化小屏下按钮换行与对齐表现。
- 默认按设备宽度控制格式栏展开状态,改善移动端初始展示。
2026-06-20 02:37:52 +08:00
LanQin 6d0935c6a5 feat(web): 增加动效插件并优化侧边栏动画
- 为 `web` 应用引入 `tailwindcss-animate`,并接入 Tailwind 配置。
- 调整 `sheet` 与 `sidebar` 的移动端遮罩、过渡时长和动画曲线,提升侧边栏展开收起体验。
- 精简移动端侧边栏无障碍标题,仅保留必要语义。
2026-06-20 02:26:45 +08:00
LanQin 4dd843b50a feat(web): 优化邮箱与个人中心移动端体验
- 为管理页、邮件页和个人中心补充移动端侧栏与抽屉导航,提升小屏可用性。
- 将多处表格/详情/编辑器改为自适应布局,优化邮件列表、消息详情、撰写与规则弹窗的移动端显示。
- 调整顶部栏、按钮与内容区域间距,统一不同屏幕下的阅读与操作体验。
2026-06-20 02:13:29 +08:00
LanQin 9b70ba5927 build(api): 升级 Go 构建环境版本
- 将 `apps/api` 的 `go` 版本提升到 `1.25.0`,并同步更新依赖校验信息。
- 将 `deploy/all-in-one/Dockerfile` 和 `deploy/api.Dockerfile` 的构建镜像升级到 `golang:1.25-bookworm`。
2026-06-19 23:48:02 +08:00
LanQin_ a592926d60 Merge pull request #1 from killerprojecte/main
fix: decode RFC 2047 encoded words in mail sender display name
2026-06-19 23:35:18 +08:00
AnserJim b147be3753 fix: revert golang version
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2026-06-19 23:18:22 +08:00
killerprojecte c3a66683ee chore: linear whitespace between adjacent encoded words is stripped 2026-06-19 23:12:20 +08:00
killerprojecte 5604b59501 fix: improve RFC 2047 decode & fix trim space 2026-06-19 22:49:20 +08:00
killerprojecte d312076d4b chore: handle more encodes & fix idx range 2026-06-19 22:15:00 +08:00
LanQin adbf3e886a docs(AGENTS): 新增仓库审查与修复规范
- 添加 `AGENTS.md`,说明仓库的项目概览与安全敏感领域。
- 补充代码审查、修复、验证与部署配置检查准则。
2026-06-19 21:47:58 +08:00
killerprojecte f0c175e7f6 fix: decode RFC 2047 encoded words in mail sender display name 2026-06-19 21:27:05 +08:00
LanQin_ 25f5933792 fix(mail): 阻止撰写弹窗外部交互关闭
- 为 `DialogContent` 增加外部交互拦截,避免点击或按下弹窗外区域时被意外关闭。
2026-06-17 15:10:07 +08:00
LanQin_ bfc114bec3 feat(web): 升级前端依赖并重构邮件编辑器
- 将前端包管理切换为 `pnpm`,新增工作区与锁文件,并同步更新 CI 与 Docker 构建流程。
- 引入 `tiptap` 重构邮件正文编辑器,支持预览、富文本样式、链接/图片编辑与日程卡片插入。
- 发送与定时发送新增确认提示,补充空主题、空正文和附件提醒。
- 更新 `README.md` 与 `SHADCN_RULES.md` 中的安装与检查命令。
2026-06-17 14:58:56 +08:00
LanQin_ 6ebbb47012 fix(mail): 统一邮箱查询的大小写与别名匹配
- 将 Postfix/Dovecot 的 SQL 查询改为忽略大小写匹配,减少地址大小写导致的投递失败。
- 支持带 `+` 的详细地址解析,并基于域表关联定位邮箱目录。
- 启用 `lda_mailbox_autocreate`,确保投递到详细邮箱时可自动创建邮箱目录。
2026-06-17 14:15:03 +08:00
LanQin_ 095d3ad247 feat(mail): 优化邮件编辑器与邮件同步行为
- 新增已发送文件夹导入测试,并让同步时自动将非收件箱邮件标记为已读。
- 优化编辑器工具栏交互,增强下拉菜单与按钮的悬停/选中态表现,并修复部分按钮点击时的选区丢失。
- 为加粗、列表、对齐等命令加入乐观切换,提升工具栏状态反馈的即时性。
2026-06-17 14:14:48 +08:00
LanQin_ a8c2fc852c feat(mail): 支持草稿与定时发送
- 新增草稿保存、草稿编辑/删除、定时发送列表与取消接口,并在后台加入待发送任务表与定时发送工作协程。
- 邮件撰写页支持草稿自动保存、定时发送弹窗、草稿入口识别,以及待发送视图与状态标记。
- 同步补充前端 API 类型与调用,并增加定时发送流程的后端测试。
2026-06-17 13:43:19 +08:00
LanQin_ f0044e477c feat(auth): 优化登录注册页面与人机验证展示
- 调整登录、注册页布局为更一致的卡片式结构,提升表单可读性与视觉层级。
- 为登录/注册按钮与状态区补充图标和文案,优化交互反馈。
- 让 Turnstile 验证组件支持自适应宽度并使用更合适的展示尺寸。
2026-06-17 10:35:56 +08:00
LanQin_ d008638046 feat(mail): 升级写信编辑器并移除 Markdown 依赖。
- 将正文编辑器改为富文本 `contentEditable`,支持字体、字号、颜色、高亮、对齐、列表、缩进等格式化操作。
- 新增抄送/密送显示切换与“分别发送”能力,优化收件人发送方式。
- 移除 `marked` 依赖,并同步精简 `turnstile-box` 的边框样式。
2026-06-17 09:44:46 +08:00
LanQin c21ebe43aa chore(deploy): 配置已发送邮件自动归档
- 为 `submission` 和 `smtps` 启用 `sender_bcc_maps`,将已认证发件人自动抄送到 `发件人+Sent@域名`。
- 补充 Postfix 与 Dovecot 的 `recipient_delimiter` 和 `lmtp_save_to_detail_mailbox` 配置,确保 `Sent` 文件夹可落盘保存。
- 更新部署文档,说明第三方客户端发信后的“已发送”同步流程。
2026-06-17 00:19:40 +08:00
LanQin 2029c8804a chore(deploy): 清理邮件服务 TLS 示例配置
- 移除 `docker-compose.yml` 中未启用的 TLS 证书环境变量示例,保持部署配置更简洁。
2026-06-17 00:08:36 +08:00
LanQin 811267e5b6 feat(deploy): 支持配置邮件客户端 TLS 证书
- 新增 `LANQIN_TLS_CERT_FILE` 和 `LANQIN_TLS_KEY_FILE`,让 Postfix 与 Dovecot 使用外部证书。
- 在单容器与分服务启动脚本中统一回退到 `localhost` 自签证书,并在证书不可读时给出告警。
- 补充部署文档与示例配置,说明第三方客户端校验证书的挂载方式。
2026-06-17 00:05:23 +08:00
LanQin 27ab80adb9 ci(docker): 简化 Docker 构建工作流
- 改用 `docker` 作为 Buildx driver,移除自定义 BuildKit 镜像配置。
- 删除构建缓存的 `cache-from` 和 `cache-to` 配置,精简镜像构建步骤。
2026-06-16 23:39:55 +08:00
LanQin 095607e35b ci(workflow): 指定 Docker Buildx 构建驱动镜像
- 为 `actions/setup-buildx-action` 配置 `driver-opts`。
- 固定 `buildkit` 镜像版本,提升构建环境一致性。
2026-06-16 23:36:01 +08:00
LanQin 5821d9aa30 feat(mail): 支持发件人名称展示与存储
- 为邮件消息新增 `fromName` 字段,并同步扩展数据库迁移、API 类型与前后端查询/入库逻辑。
- 解析入站邮件时提取并保存发件人名称,发信时将邮箱显示名写入 MIME `From` 头。
- 邮件列表、详情、通知与引用内容改为优先展示发件人名称,提升可读性。
2026-06-16 23:29:23 +08:00
LanQin 045132146b feat(mail): 增加签名管理与客户端配置
- 新增邮件签名的数据表、接口和前端管理页,支持全局/邮箱默认签名的创建、编辑、删除与查询。
- 写信时自动带入当前邮箱的默认签名,并优化手动输入内容时的覆盖行为。
- 补充第三方邮件客户端配置页,展示 IMAP/POP3/SMTP 连接信息及公共主机名。
- 扩展部署配置,开放 POP3S/SMTPS 端口并启用 Dovecot POP3 服务。
2026-06-16 23:15:35 +08:00