mirror of
https://git.openapi.site/https://github.com/desirecore/market.git
synced 2026-10-21 08:24:04 +08:00
feat(mail-operations): 补充标记为垃圾邮件 / 不是垃圾邮件接口(1.1.0) (#208)
## 变更 / Changes
mail-operations 1.0.6 → 1.1.0:补充客户端新增的「标记为垃圾邮件 / 不是垃圾邮件」接口。
Adds the client's new mark-as-junk / not-junk endpoints to
mail-operations (1.0.6 → 1.1.0).
- 「单封邮件操作」表新增两行:Gmail、IMAP 用 `POST …/{id}/spam`、`…/not-spam`,Outlook 用
`POST /outlook/message/spam?id=`、`…/not-spam?id=`。
Two rows in the single-message table.
- 补充使用说明:返回 `result: {id, folder}`;Outlook、IMAP 移动后 `id` 会变;IMAP
没有垃圾邮件文件夹时返回 409
`imap_spam_folder_not_found`,不要重试;「不是垃圾邮件」一次一封;移回收件箱不触发规则。
Usage notes: new id after Outlook/IMAP moves, 409 when an IMAP account
has no junk folder, Not junk one at a time, no rule re-trigger.
- `market.required_client_version` 与 sidecar 的
`compatibility.requiredClientVersion` 同步改为
`10.0.178`。内置技能同步会按它拦截,旧客户端继续使用 1.0.6,不会拿到调用后返回 404 的接口说明。
Client gate raised to 10.0.178 so older clients keep 1.0.6.
- 中文是源语言;英文译文(`translated_by: human`)已人工同步,`source_hash` 用
`translate.py` 的 `compute_source_hash` 重新计算。
zh-CN source and human en-US translation updated together; `source_hash`
recomputed with the repository's own function.
## 合并时机 / Merge timing
客户端实现在 desirecore/desirecore#4205,它依赖 desirecore/desirecore#4195。**请在
#4205 合入、确认随 10.0.178 发布之后再合并本 PR。** 如果实际发布的版本号不是 10.0.178,先把两处
`required_client_version` 改成实际版本再合并。合并后,客户端仓库需要运行 `npm run sync-market`
刷新内置的 `market.zip`。
The client side is desirecore/desirecore#4205 (depends on #4195). Merge
this after #4205 lands and ships in 10.0.178; adjust both version gates
if the release number differs. Afterwards regenerate the client's
bundled `market.zip` with `npm run sync-market`.
## 校验 / Checks
- `validate-i18n.py`:0 error,123 warning(与改动前相同;mail-operations 的两条
license / review evidence 警告原来就有)。
- `validate_catalog_metadata.py --require-complete`:0 error。
- `translate.py --check skills/mail-operations`:en-US 为
human-locked,与源一致。
-
公开信息检查:改动内容只有通用的接口说明,不含任何租户、客户或合作方信息。**未用私有敏感词清单做全量扫描**:本次没有拿到这份清单,合并前请维护者补跑一次。
Public-information review: generic API text only. The private-token scan
was not run because the token list was not available; please run it
before merging.
This commit is contained in:
@@ -136,7 +136,7 @@ mail-operations 是一个**流程型技能(Procedural Skill)**,通过 Desi
|
||||
**folder 取值**:
|
||||
- 本地缓存列表与搜索:`inbox, sent, drafts, trash, spam, archive, other`,大小写不敏感,也接受服务器原名(如 `INBOX`、`Sent Messages`);IMAP 的自定义文件夹在本地统一归为 `other`。
|
||||
- 远程同步:通用名(`inbox`、`sent` 等)会自动映射到 IMAP 实际文件夹、Outlook 文件夹或 Gmail 标签;IMAP 也可直接传 `GET /imap/folders` 返回的 `path`。Gmail 的 `archive` 没有对应标签,会不加过滤地拉取。
|
||||
- **IMAP 单封操作**(详情未命中缓存、标记已读/未读、删除、回复、附件下载)的 `folder` 会原样交给 IMAP 服务器,必须是 `GET /imap/folders` 返回的真实 `path`(如 `INBOX`、`Sent Messages`),省略时默认 `INBOX`。列表项里的 `folder` 是归一化后的值(如 `sent`),不能直接当作 IMAP 文件夹名。
|
||||
- **IMAP 单封操作**(详情未命中缓存、标记已读/未读、删除、标记为垃圾邮件 / 不是垃圾邮件、回复、附件下载)的 `folder` 会原样交给 IMAP 服务器,必须是 `GET /imap/folders` 返回的真实 `path`(如 `INBOX`、`Sent Messages`),省略时默认 `INBOX`。列表项里的 `folder` 是归一化后的值(如 `sent`),不能直接当作 IMAP 文件夹名。
|
||||
|
||||
**响应格式**(邮件列表项):
|
||||
```json
|
||||
@@ -162,9 +162,18 @@ mail-operations 是一个**流程型技能(Procedural Skill)**,通过 Desi
|
||||
| 标记已读 | POST `/{id}/read?email=` | POST `/message/read?id={id}&email=` | POST `/{uid}/read?email=&folder=` |
|
||||
| 标记未读 | POST `/{id}/unread?email=` | POST `/message/unread?id={id}&email=` | POST `/{uid}/unread?email=&folder=` |
|
||||
| 删除 | DELETE `/{id}?email=` | DELETE `/message?id={id}&email=` | DELETE `/{uid}?email=&folder=` |
|
||||
| 标记为垃圾邮件 | POST `/{id}/spam?email=` | POST `/message/spam?id={id}&email=` | POST `/{uid}/spam?email=&folder=` |
|
||||
| 不是垃圾邮件 | POST `/{id}/not-spam?email=` | POST `/message/not-spam?id={id}&email=` | POST `/{uid}/not-spam?email=&folder=` |
|
||||
|
||||
> 所有路径前缀为 `/api/{provider}/messages`(Gmail/IMAP)或 `/api/outlook/`(Outlook 特殊路由)。IMAP 的 `{uid}` 可直接用列表返回的 `id`(`imap:<uid>`),`folder` 规则见第 2 节,INBOX 可省略。
|
||||
|
||||
**标记为垃圾邮件 / 不是垃圾邮件**:把邮件移入垃圾邮件文件夹,或从垃圾邮件文件夹移回收件箱,服务器与本地缓存同时修改,返回 `result: {id, folder}`。
|
||||
- Gmail 改 `SPAM` / `INBOX` 标签,`id` 不变;Outlook、IMAP 移动后 `id` 会变,之后再操作这封邮件要用返回的新 `id`。IMAP 服务器不支持 UIDPLUS 时 `id` 为 `null`,对目标文件夹做一次 `messages/fetch` 后再取。
|
||||
- IMAP 账户在服务器上没有垃圾邮件文件夹时返回 409 `imap_spam_folder_not_found`,如实告知用户,不要重试,也不要改用其他文件夹代替。
|
||||
- 邮件已经在目标文件夹时直接返回成功。移回收件箱的邮件不会触发邮件规则,也不会推送新邮件通知。
|
||||
- 「不是垃圾邮件」一次只处理一封,不要把一批邮件一起移回收件箱;标记为垃圾邮件可以逐封调用。
|
||||
- 需要客户端 10.0.178 及以上;旧客户端返回 404,提示用户升级客户端。
|
||||
|
||||
**邮件详情额外字段**:`body: {content, contentType}`, `ccRecipients`, `attachments: [{id, filename, contentType, size}]`。IMAP 附件的 `id` 是附件在该邮件中的序号字符串(`"0"`、`"1"`……)。
|
||||
|
||||
### 4. 发送与回复
|
||||
|
||||
Reference in New Issue
Block a user