前言¶
在 DeepSeek Harness(DSH)裏跑 Agent,常見痛點是:主人不在同一個對話窗口,任務只能通過聊天或側欄下達,遠程異步溝通沒有固定入口。把郵箱當「通知渠道」往往又要自己寫 IMAP/SMTP 輪詢、把新信注入會話、發完還要對賬——這些和 Agent 能力無關,卻佔掉不少膠水代碼。
dsh-mail-channel(GitHub:Wang-BinNian/dsh-mail-channel)面向這類需求:它不是郵箱客戶端,而是一套給 Agent 用的郵件工具與可預測的到信喚醒通道。傳輸層在插件進程內用 Node 內置模塊完成 IMAP/SMTP,README 寫明零運行時依賴、不調用外部腳本。維護者 Wang-BinNian,社區目錄分類爲工作流;截至資料抓取時倉庫星標爲 0,npm 包版本爲 0.1.0(MIT)。
下面介紹它做什麼、怎麼裝、怎樣用對話完成首次配置,以及使用時的渠道規則與安全默認。
這是什麼¶
一句話:dsh-mail-channel 把郵箱變成 Agent 與主人之間的常駐通信通道——新開對話也會自帶收發信相關工具;主人來信可喚醒綁定的會話,Agent 按「讀即認領、發必回查」走完一輪。
資料中的數據流可以概括爲:
主人 ──SMTP──> 郵箱 ──IMAP──> 插件 ──fs.watch──> 喚醒綁定對話
▲ │
└── mail_send ◄── 幹活 │
是:9 個常駐郵件工具(含首次配置用的 mail_setup)、到信喚醒、本地落盤的地址簿 / 往來檢索 / 待辦隊列 / 發信記錄。
不是:沒有收件箱 UI、富文本編輯、簽名模板;不做多賬號 / OAuth2 / POP3(一個 profile 一個郵箱);不替代主人日常用的郵件 App。
核心功能¶
九工具與側欄開關¶
插件常駐工具包括:mail_inbox、mail_read、mail_send、mail_verify、mail_bind、mail_contacts、mail_history、mail_doctor、mail_setup。側欄底部有「郵件」按鈕,可一鍵開關自動收信;開啓後綁定當前對話,切換對話時按焦點跟隨。資料註明:開啓時不補喚醒積壓。
到信喚醒與處理閉環¶
- 到信喚醒:新信落盤後通過
fs.watch(1.5s 去抖)向綁定會話注入主題、發件人、摘要與處理流程。 - 讀即認領:
mail_read讀全文的同時寫.done,避免重複處理。 - 發必回查:
mail_send發出後由mail_verify按 Message-ID 或自定義頭定位;服務商改寫 id 時用主題與時間窗兜底;pending不算失敗。
安全與可靠性(資料摘要)¶
- 默認僅當發件人地址精確匹配才喚醒(From 頭僞造無效);發信受
sendPolicy約束;可選一次性回信令牌或靜態口令。 - 啓動失敗指數退避、斷線重連退避、單實例鎖、日誌按大小輪轉。
- 實現僅依賴 Node 內置模塊;
package.json要求node >= 22.19,peer 依賴@deepseek-ai/dsh ^0.2.2-rc.1。
安裝與啓用¶
應用內安裝(推薦)¶
側欄 → 插件 → 添加插件 → 安裝第三方插件 → 填寫:
dsh-mail-channel
命令行安裝¶
桌面 profile 爲 desktop;若在 dsh web 等命令行環境,把 desktop 換成 web:
dsh plugin --profile desktop add dsh-mail-channel
裝好後重啓 DSH;側欄底部出現「郵件」開關即表示安裝成功。
升級或指定版本時,可在插件面板重裝,或使用:
dsh plugin --profile desktop add dsh-mail-channel@<version>
然後重啓;數據目錄與配置會保留。
典型用法:對話裏三步跑通¶
資料強調:不需要手改配置文件,首次配置可在對話中用一句話完成。
① 安裝並重啓¶
按上一節安裝 → 重啓 → 確認側欄「郵件」開關存在。
② 對 Agent 說一句話完成配置¶
示例(地址與授權碼替換爲真實值):
幫我配置郵箱:主人是 owner@example.com,本機是 agent@example.com,授權碼是 xxxxxxxx
Agent 會調用 mail_setup,把地址寫入 $DSH_HOME/mail-channel/settings.json(未設置 DSH_HOME 時默認爲 ~/.dsh/mail-channel),賬號與授權碼進入 DSH 憑據庫(MAIL_CHANNEL_USER / MAIL_CHANNEL_PASSWORD),立即生效,無需重啓、也無需改 cordis.patch.yml。
同一句話裏還可說明:主人別名、發信署名、IMAP/SMTP 服務器(默認按 QQ:imap.qq.com / smtp.qq.com)、發件箱名、舊數據目錄 mailDir 等可選項。
更穩妥的做法是事先通過 DSH 憑據服務、環境變量或 credentialFile 放好憑據,對話裏只給兩個地址,避免授權碼進入對話記錄。
③ 打開開關並自檢¶
側欄底部打開「郵件」→ 自動綁定當前對話;對 Agent 說「做一次郵件通道自檢」,跑 mail_doctor,確認憑據、收信連接、地址配置、實例鎖均通過。
回覆渠道規則(重要)¶
插件同時提供工具和自動喚醒,但 README 明確區分渠道:
| 場景 | 做法 |
|---|---|
| 普通對話裏下達的任務 | 在對話裏彙報結果,不要調用 mail_send,除非主人明確要求發郵件 |
| 由郵件喚醒的回合 | mail_read → 幹活 → mail_send → mail_verify |
| 主人明確要求郵件通信 / 遠程處理 | 走完整郵件流程 |
判斷依據:本輪是否由「MAIL ARRIVED」喚醒,或主人是否明確要求郵件。
高級配置(可選)¶
默認路徑已由 mail_setup 寫入 settings.json。若需覆蓋默認值,可在用戶層 cordis.patch.yml 中按 id 覆蓋已有 bundle 行,不要用 - insert: 重複插入 mail-channel。
合併順序爲:DEFAULTS < settings.json < profile patch config。
常用字段示例(佔位域名,換服務商時改 IMAP/SMTP 與郵箱名):
- id: mail-channel
config:
ownerAddress: owner@example.com
selfAddress: agent@example.com
imapHost: imap.example.com
imapPort: 993
smtpHost: smtp.example.com
smtpPort: 587
receive: true
sendPolicy: confirm
wakeAuth: address
sendPolicy 可取 owner-only | confirm | open;wakeAuth 可取 address | token。完整鍵說明見倉庫 README「配置」一節。
憑據解析優先級(前項覆蓋後項):配置裏的 user+password → DSH 憑據服務 → 同名環境變量 → credentialFile。
適用場景與注意¶
適合:希望主人用郵件異步下達任務、Agent 在 DSH 內自動認領並回信對賬;希望 SMTP/IMAP 與喚醒邏輯集中在插件裏、不另起守護腳本。
限制:單郵箱單 profile;無 OAuth;不是日常讀信 UI。
安全:插件以當前 DSH 進程權限運行,會訪問你配置的郵箱與本地 $DSH_HOME/mail-channel/。安裝前建議在 GitHub 倉庫 查看源碼與 MIT 許可證;憑據優先走憑據服務而非明文出現在對話裏。卸載後可選刪除 $DSH_HOME/mail-channel/ 清理本地隊列與日誌(郵箱裏的郵件不受影響)。
結尾¶
dsh-mail-channel 把「收信喚醒 → 會話內處理 → 發信回查」收成一套工作流工具與側欄開關,適合把郵箱當作 Agent 與主人之間的固定通道,而不是再做一個郵件客戶端。