# Changelog 本项目是从 [PAKIKNOWLEDGE/dsh-notify-skill](https://github.com/PAKIKNOWLEDGE/dsh-notify-skill) fork 的加固版。 This is a hardened fork of [PAKIKNOWLEDGE/dsh-notify-skill](https://github.com/PAKIKNOWLEDGE/dsh-notify-skill). ## 1.2.1 — 修复 dsh 0.1.2-rc.1 启动崩溃(settingsNamespace 移除) ### 修复的 bug - **dsh 升级到 0.1.2-rc.1 后启动崩溃**:`@deepseek-ai/dsh-settings@0.1.2-rc.1` 移除了对 `settingsNamespace` 的命名导出(内部改为 `parseSettingsNamespace`)。插件在 `index.mjs` 顶层 `import { settingsNamespace } ...`,导致 `dsh-start` 每次自动更新后 ESM 加载失败并整体退出。现在改为直接向 `sctx.settings.register(EMAIL_PUSH_NS, ...)` 传入命名空间字符串——`SettingsProvider.register()` 内部会用同样的 `/^[a-z][a-z0-9-]*$/` 校验,行为不变,且不再依赖任何版本中易变的内部导出。 - 插件不再需要 `@deepseek-ai/dsh-settings` 的任何导出,避免未来 dsh-settings 再变动时重复崩。 ### 验证 - `node --check index.mjs` 通过;直接 `import('./index.mjs')` 成功。 ## 1.2.0 — 修复设置面板不显示 + 配置持久化 ### 修复的 bug - **设置 → 插件 → 「邮件推送」面板不显示**:DSH 的 `settings.plugin.item` 卡片只会被派发给 **Host 实际提供服务**(`settings.describe` 返回)的命名空间。此前插件只注册了 HTTP 路由和 skill,从未注册 `dsh-email-push` 设置命名空间,因此客户端卡片永远被过滤掉。现在在主机端注册该命名空间,面板即可正常出现在「可配置」页。 - **重装插件/依赖后配置丢失、agent 找不到配置文件**:`config.json` 原本写在插件包目录(`node_modules`)里,任何一次 `pnpm install`(例如新增别的插件)都会把它连同整个包目录一起删掉。现在配置改存到**持久路径** `~/.config/dsh-email-push-master/config.json`(可用 `DSH_EMAIL_PUSH_CONFIG` 覆盖),写入时自动建目录,重装不再丢失。 - **修复本身不再被重装冲掉**:安装方(profile)用 `patchedDependencies` 把上述两处修复固化为每次安装自动重放。 ### 行为变化 - `config.json` 位置:`<包目录>/config.json` → `~/.config/dsh-email-push-master/config.json`。旧的配置在安装后若已存在会被忽略,请到 设置 → 插件 → 邮件推送 重新填写一次。 ## 1.0.0 — 稳定性 / 严谨性加固 ### 修复的 bug - **去掉 `535` 自动重试**:旧版在 `535` 时换 `AUTH PLAIN` 重试,但 `535` 是永久性错误(授权码错 / 账号风控 / SMTP 服务未开启),重试只会**加剧账号风控锁定**。现在只在瞬态错误(网络 / 超时 / `421` / `451`)时重试一次。 - **修复 `subject`/`text` 未定义崩溃**:`sendMail()` 引用了 `subject`/`text` 却未从 `opts` 提取,导致 `ReferenceError`。 ### 新增 - **连接超时(15s) + 空闲超时(30s)**:服务器不响应时不再永久挂起。 - **`--check` 自检命令**:`node sender.mjs --check` 只验证配置 + SMTP 认证,不真正发信(替代临时探测脚本)。 - **结构化错误分类**:`ConfigError` / `AuthError(535)` / `PermissionError(550)` / `TransientError` / `ProtocolError`,各自带 `smtpCode`,CLI 输出精确一句话。 - **完整邮件头**:`From / To / Date / Message-ID / MIME`(旧版只有 Subject)。 - **配置校验**:邮箱格式、端口合法性、主机推断;`loadConfig` 与 `sendMail` 共用同一套校验(去重)。 ### 退出码 `0` 成功 · `2` 配置错误 · `3` 认证失败(535) · `4` 无权限(550) · `5` 瞬态失败 ## 1.1.0 — 图形化配置面板 - 新增 **Web GUI 设置面板**(设置 → 插件 → 「邮件推送」):展开后可直接填写 **服务商**(163/QQ/自定义)、**发送服务器地址**、**发件邮箱**、**密钥(SMTP 授权码)**、**收件邮箱**,无需再手改 `config.json`。 - 面板通过主机端 `/dsh-email-push/config`(GET/POST)与 `/dsh-email-push/test`(POST)路由读写配置并做认证自检;密钥从不出现在浏览器回显中(回显掩码 + `hasAuthCode` 标记,留空即保留原值)。 - 复用 `sender.mjs` 的 `checkAuth` / `readConfigFile` / `writeConfigFile`,配置与 SMTP 逻辑仍是单一来源。