LanQin
|
cc75382869
|
fix(external_imap): 修复 IMAP 文件夹列表兼容性
- 在测试外部 IMAP 账号时,将文件夹列表失败提示改为更准确的错误信息。
- 为 OAuth XOAUTH2 认证和文件夹列表补充更明确的错误包装,便于定位问题。
- 对不支持 `LIST RETURN (STATUS ...)` 的 Outlook/Exchange 服务降级为普通 `LIST`,再单独查询文件夹状态。
|
2026-06-25 22:25:30 +08:00 |
|
LanQin
|
efcdc691de
|
refactor(app): 优化后台任务退出与外部 IMAP 认证
- 统一用 `WaitGroup` 管理后台 worker,关闭时等待任务结束后再释放数据库连接。
- 将外部 IMAP 的 OAuth 认证切换为 `XOAUTH2` 客户端实现,并补充对应格式测试。
- 调整发送队列的故障恢复逻辑,超时中断后恢复为排队状态以便重新投递。
|
2026-06-25 21:36:59 +08:00 |
|
LanQin
|
081cfad02d
|
feat(external_imap): 强化 OAuth 外部邮箱授权校验并完善 Outlook 文案
- OAuth 授权改为以服务商返回的真实邮箱为准,补充 ID Token 解析与邮箱一致性校验,避免默认落到本地邮箱。
- 为 Gmail 和 Microsoft 365 / Outlook OAuth 增加必要的 OIDC scope,并补充相关测试覆盖。
- Web 端新增 OAuth 授权弹窗,支持填写外部邮箱与存储模式;同步更新账号展示信息。
- 同步修正 README 与部署说明中的 Outlook 表述。
|
2026-06-25 21:17:04 +08:00 |
|
LanQin_
|
39f5249008
|
feat(mail): 增强外部 IMAP 接入能力。
- 新增 Gmail/Outlook OAuth2 授权接入、附件分片下载、服务端搜索与单文件夹同步历史。
- 扩展外部 IMAP 账户与同步任务数据结构,补充相关路由、配置和前端管理界面。
- 更新部署示例与文档,说明 OAuth 回调地址及后续邮件系统规划。
|
2026-06-25 20:20:37 +08:00 |
|
LanQin_
|
11734bf119
|
feat(mail): 支持外部 IMAP 账号接入。
- 新增外部 IMAP 账号的加密存储、同步任务与远端直连能力。
- Web 端个人邮箱页和邮件列表页支持查看、测试、同步和切换外部邮箱。
- 补充相关配置项、环境变量说明和使用文档。
|
2026-06-25 17:09:46 +08:00 |
|
LanQin_
|
2558aa96ed
|
refactor(mail): 统一右键菜单按钮样式
- 将邮件页右键菜单中的原生 `button` 替换为 `Button` 组件。
- 抽取通用按钮样式,统一打开、刷新、移动、标签等菜单项表现。
- 保持删除等危险操作的视觉强调一致。
|
2026-06-25 16:17:56 +08:00 |
|
LanQin_
|
98e7190512
|
feat(mail): 增强发送队列筛选与投递追踪能力
- 发送队列支持按 Message-ID、收件人和时间范围筛选,并改为稳定游标分页。
- 邮件详情补充关联的发送队列信息,支持从邮件直接查看投递时间线。
- 前端同步接入新筛选条件,并在发送队列页提供清除筛选入口。
|
2026-06-25 16:13:44 +08:00 |
|
LanQin_
|
4ab7815886
|
feat(mail): 支持删除自定义文件夹并回收邮件
- 后端新增文件夹删除接口,禁止删除系统文件夹,并将文件夹内邮件自动移回收件箱。
- 前端补充删除文件夹的 API 调用、侧边栏菜单入口和确认弹窗。
- 增加测试覆盖删除自定义文件夹后的邮件回收与系统文件夹保护。
|
2026-06-25 15:56:57 +08:00 |
|
LanQin_
|
361daf8693
|
feat(mail): 为侧边栏添加右键菜单操作
- 支持对侧边栏条目打开、刷新和新建文件夹。
- 为自定义文件夹增加置顶、上移、下移、置底操作。
|
2026-06-25 15:50:39 +08:00 |
|
LanQin_
|
d2a762a426
|
feat(mail): 支持自定义邮件文件夹排序
- 后端为 `folders` 增加 `sort_order`,并提供文件夹重排接口。
- 前端邮件侧边栏支持自定义文件夹拖拽排序与乐观更新。
- 补充文件夹排序相关测试,并同步更新 API 类型定义。
|
2026-06-25 15:42:36 +08:00 |
|
LanQin_
|
7799d5d5b2
|
feat(mail): 支持创建自定义文件夹与邮件右键操作
- 新增文件夹创建接口与服务端校验,支持创建自定义文件夹并在列表中使用。
- 为邮件列表补充右键菜单,支持打开、回复、转发、标记、归档、移动、打标签和删除。
- 规则编辑中的“移动到”动作支持自定义文件夹名称输入。
- 补充相关测试,覆盖文件夹创建与邮件移动流程。
|
2026-06-25 14:11:38 +08:00 |
|
LanQin_
|
07054ca342
|
refactor(mail): 精简邮件通知与元信息展示
- 点击新邮件提示可直接打开首封新邮件,并兼容键盘回车与空格操作。
- 移除邮件详情中的认证结果展示及相关类型定义,简化消息元信息结构。
|
2026-06-25 11:42:11 +08:00 |
|
LanQin_
|
84657f91f9
|
fix(toast): 修复 Toast 点击交互
- 为可点击的 Toast 添加指针样式,提升交互反馈。
- 阻止关闭按钮点击事件冒泡,避免触发外层点击逻辑。
|
2026-06-25 11:30:37 +08:00 |
|
LanQin
|
a5f5adf752
|
chore: 合并 Maildir 修复与 README 更新
|
2026-06-24 19:55:43 +08:00 |
|
LanQin_
|
947e3ad248
|
fix(app): 重建仅含 HTML 邮件摘要
- 在迁移流程中新增仅含 HTML 消息摘要重建,修正旧数据中摘要保留样式内容的问题。
- 扩展 `snippetFrom` 的清理逻辑,过滤 `style`、`script`、`head`、`title`、`noscript` 等非内容标签。
- 补充相关测试,覆盖样式内容被剔除后的摘要重建行为。
|
2026-06-24 17:34:41 +08:00 |
|
LanQin_
|
2a572bf13a
|
feat(mail): 增强邮件认证与审计能力
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
Docker Release / Create GitHub release (push) Blocked by required conditions
- 新增邮件认证结果解析、存储与前端展示,支持查看 SPF、DKIM、DMARC 及原始头信息。
- 扩展邮件规则条件,支持抄送、附件、大小、日期及嵌套条件组合。
- 增加邮箱容量统计与发送前配额校验,超限时返回明确错误。
- 新增管理端发送审计页面与接口,支持按邮箱、事件、Message-ID 和时间筛选。
|
2026-06-24 17:16:01 +08:00 |
|
LanQin_
|
2b846ac671
|
feat(mail): 增加发送队列管理
- 新增发送队列与投递时间线接口,支持查看、筛选、重试和取消发送任务。
- 扩展邮箱页面,加入发送队列入口、状态筛选和时间线弹窗。
- 更新发送队列状态流转,支持 `canceled` 并补充相关测试与前端类型定义。
|
2026-06-24 16:39:40 +08:00 |
|
LanQin_
|
b3669f189e
|
feat(imap): 补充邮件 IMAP 元数据支持
- 为文件夹和消息增加 `UID/ModSeq` 字段,并在迁移时回填与建索引。
- 让收发、移动、标记、删除、草稿等流程同步维护 `imap_uid` 和 `imap_modseq`。
- 扩展后端与前端类型,并补充相关测试覆盖。
|
2026-06-24 16:23:45 +08:00 |
|
LanQin_
|
d28ed4adcc
|
feat(admin): 增加 Maildir 同步健康状态
- 新增后端健康检查接口与同步追踪,记录运行状态、最近结果、错误摘要和统计信息。
- 前端管理页在存储设置中展示 Maildir 同步健康卡片,并支持手动刷新。
- 补充相关类型定义与测试,覆盖未配置和同步成功两类场景。
|
2026-06-24 16:08:48 +08:00 |
|
LanQin_
|
b36adfdac2
|
fix(maildir): 同步 IMAP 移动、标记与删除状态
- 让 maildir 同步在消息移动到其他文件夹时更新 `folder_id` 和 `raw_path`。
- 根据文件名中的 maildir 标记同步已读、星标状态。
- 增加缺失消息清理,避免数据库残留已被删除的 maildir 邮件。
- 补充回归测试覆盖移动、重复副本、标记更新和删除场景。
|
2026-06-24 15:46:17 +08:00 |
|
LanQin_
|
632a8a4896
|
fix(maildir): 同步邮件已读状态到 maildir 标记
- 读取邮件时同步更新 maildir 的 `S` 标记,避免数据库已读状态与文件名不同步。
- 写入邮件到 `maildir` 时保留已有非托管标记,并确保已读/星标标记正确拼接。
- 补充测试,校验已发送邮件和草稿的原始路径包含已读标记。
|
2026-06-24 15:33:56 +08:00 |
|
LanQin_
|
f8d058f7e4
|
fix(maildir): 同步消息标记到 Maildir
- 标记已读、加星时同步重写 `raw_path`,保持数据库与文件系统状态一致。
- 新增 Maildir 标记路径计算与迁移逻辑,支持读/星标变化后调整目录和文件名。
- 补充测试覆盖已读、未读、加星场景的 Maildir 路径变化。
|
2026-06-24 15:27:30 +08:00 |
|
LanQin_
|
1788d49a59
|
feat(maildir): 支持邮件写入与同步联动
- 为已发送邮件、草稿、收件与规则移动增加 maildir 文件写入、重写和删除流程。
- 补充 SQLite 仅有消息的回填逻辑,并在同步时补齐现有 raw_path。
- 调整 Dovecot 共享邮箱行为为订阅方式,避免重复创建文件夹。
- 新增覆盖发送、草稿、移动、删除和回填场景的测试。
|
2026-06-24 15:18:06 +08:00 |
|
LanQin_
|
adcc822c9a
|
fix(mail): 优化邮件 HTML 与样式保留
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
Docker Release / Create GitHub release (push) Blocked by required conditions
- 支持整页邮件文档的清洗与渲染,保留 `<html>`、`<head>`、`<body>` 和 `<style>` 等结构。
- 提取并校验安全的邮件样式块,阻止包含外链、脚本式内容的 CSS。
- 补充 `dompurify` 类型声明以支持 `WHOLE_DOCUMENT` 配置。
|
2026-06-24 14:19:31 +08:00 |
|
LanQin_
|
18db36d937
|
feat(mail): 优化邮件正文渲染与样式保留
- 邮件正文改为在 `iframe` 中渲染,提升排版隔离和显示稳定性。
- 扩展前端清洗配置,保留邮件常见布局样式与表格属性。
- 收紧后端 HTML 策略的样式白名单,兼顾邮件样式保留与安全过滤。
- 补充测试,验证邮件布局样式可保留且危险内容仍会被拦截。
|
2026-06-24 13:55:09 +08:00 |
|
LanQin_
|
65e4c4f6b5
|
fix(send_queue): 修复已投递标记恢复逻辑
- 新增投递标记文件持久化,避免重启后重复发送已投递的队列项。
- 在恢复卡住的发送任务时,识别已存在的投递标记并直接修复数据库状态。
- 同步补充回归测试,覆盖陈旧投递标记不应触发重发的场景。
|
2026-06-24 13:35:37 +08:00 |
|
LanQin_
|
d3bee62acd
|
refactor(submission): 重构发件入库的去重流程。
- 将发件消息插入与附件保存改为事务内执行,避免去重键存在但消息缺失时产生脏数据。
- 抽出可注入的数据库执行器,便于在同一事务中复用消息与附件写入逻辑。
- 补充异常场景测试,覆盖“去重键存在但未命中消息”的失败行为。
|
2026-06-24 13:26:53 +08:00 |
|
LanQin_
|
d1876691dd
|
fix(submission): 调整 SMTP 提交与发件授权逻辑。
- 启用 SMTP submission 时改为强制使用可读证书文件,并禁止使用容器自带测试证书。
- 收紧发件人校验,拒绝未授权的 From 地址,并支持别名多目标授权。
- 优化发送队列重入与重复消息处理,避免重复记录冲突。
- 让提交证书按需热加载,并稳定 MIME 头序列化顺序。
- 更新部署示例与文档,明确 submission 的证书配置要求。
|
2026-06-24 13:10:24 +08:00 |
|
LanQin_
|
2476fe0c19
|
fix(send_queue): 修复重复消息 ID 的失败重排并清理 MIME
- 投递成功后清空 `mime_base64`,避免已投递队列项保留原始 MIME。
- 当同一 `message_id` 的旧队列项已达到最大失败次数时,允许复用并重新入队。
- 补充测试覆盖已投递项清理与终态失败重排场景。
|
2026-06-24 11:33:40 +08:00 |
|
LanQin_
|
7b0717412c
|
feat(app): 引入发送队列与可授权发件人
- Webmail/API 与第三方提交统一先写入已发送,再入发送队列异步投递。
- 新增队列重试、失败审计、陈旧任务恢复与发送状态追踪。
- 支持本人邮箱、启用别名和 `send_as_grants` 显式授权的 send-as。
- 更新 README 与部署文档,说明新的外发流程和排障方式。
|
2026-06-24 11:27:32 +08:00 |
|
LanQin_
|
5c9bea075a
|
chore(deploy): 优化 split stack 的 SMTP 配置
- 为 `docker-compose.stack.yml` 的 API 容器默认注入 `LANQIN_SMTP_HOST/PORT`,避免 Webmail 发信配置漂移。
- 补充 `.env.example` 和 `README`,说明 split stack 默认走 `postfix`,以及外部 SMTP 的覆盖方式。
- 新增 `sent_message_dedupe_keys` 表和相关读写逻辑,确保已发送消息去重可回收,并补充对应测试。
|
2026-06-24 11:03:01 +08:00 |
|
LanQin_
|
fa450c9f9b
|
feat(mail): 支持 SMTP Submission 由 API 接管
- 新增 `465/587` 提交服务与 TLS 配置,支持 StartTLS 和隐式 TLS。
- 提交时校验认证邮箱、权限和 `From` 一致性,先写入 `Sent` 再转发到后端 SMTP。
- 增加 `Message-ID` 去重与失败回滚,避免重复保存发送副本。
- 调整部署与文档,移除 Postfix 的 submission 监听,改由 LanQin API 对外提供提交端口。
|
2026-06-24 10:47:16 +08:00 |
|
LanQin_
|
f2457c63ee
|
refactor(mail): 统一邮件认证策略请求与返回格式。
- 将 `auth-policy` 调整为读取 `login`、`remote` 等字段,并返回数值型 `status`。
- 支持按邮箱定位用户与邮箱箱体,补充 IMAP/POP3 认证策略校验。
- 更新 Dovecot 与 Postfix 配置,移除原有的发件人 BCC 依赖。
- 补充相关测试并同步部署说明。
|
2026-06-23 21:52:05 +08:00 |
|
LanQin_
|
8d434b9ca8
|
chore(app): 修正 maildir 目录配置读取
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
Docker Release / Create GitHub release (push) Blocked by required conditions
- 启动 maildir worker 时改为读取 `a.cfg.MaildirRoot`,避免使用未确认的入参值。
|
2026-06-23 15:32:12 +08:00 |
|
LanQin_
|
b309368225
|
feat(admin): 增加版本更新检查
- 在关于页检查 GitHub 最新发布版本。
- 发现新版本时提示并提供跳转查看链接。
|
2026-06-23 14:07:20 +08:00 |
|
LanQin_
|
23b04bd343
|
feat(mail): 增强邮件限流与配额配置
- 新增 IMAP/POP3 事件表与清理任务,并接入 Dovecot auth policy。
- 暴露默认权限限额接口,前端权限组页面改为动态读取。
- 为 Dovecot 配置用户配额、连接数限制和 auth policy。
|
2026-06-23 11:25:38 +08:00 |
|
LanQin_
|
36b4c4c60f
|
feat(权限组): 增加账号配额与邮件发送限制
- 为权限组与用户新增配额字段,支持附件大小、SMTP/IMAP/POP3 频率限制。
- 后端补充权限组配额校验、迁移与 SMTP 发送限流,邮件发送/定时发送时统一生效。
- 前端在管理页、邮件撰写页和个人资料页展示并编辑配额信息。
|
2026-06-23 11:09:36 +08:00 |
|
killerprojecte
|
2d7625a751
|
Merge branch 'main' of https://github.com/killerprojecte/LanQin-Email
|
2026-06-22 21:08:33 +08:00 |
|
killerprojecte
|
3eebc1c358
|
fix: delete label without mailboxId caused 404 error on non-default mailbox
|
2026-06-22 21:08:11 +08:00 |
|
AnserJim
|
0b4b4441c0
|
chore: use activeMailboxId instead of selectedMailboxId
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
|
2026-06-22 20:23:20 +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 |
|