用 dsh-email 给 DeepSeek Harness 智能体装上邮箱

前言

DeepSeek Harness(下文简称 DSH)把模型、工具、会话和界面都做成插件。官方仓库的定位是「Everything is a Plugin」:加能力改配置,不必改 Harness 源码。智能体因此能写代码、查文件、跑终端,但邮箱这一层通常还得自己打开客户端。

日常里这类需求很具体:看一眼未读、按主题搜一封合同、把附件落到工作区、起草回复再发出去。自己复制粘贴当然可以,但会话一长就容易漏。社区插件 dsh-email 做的就是这件事:用标准 IMAP/SMTP 把收件箱接到 agent 的工具列表里。

本文按 DSH 插件目录 详情页和 GitHub 仓库 STARDUSTLC666/dsh-email(README、package.json、许可证,核对于 2026-08-18)整理:它是什么、有哪些工具、怎么安装配置,以及发信审批和凭证该怎么处理。目录站点是社区维护的检索入口,与 DeepSeek / 幻方没有官方从属关系;插件本身也在 README 里写明是社区项目,和官方无关。

这是什么

dsh-email 是一款界面增强类插件,由 GitHub 用户 STARDUSTLC666 维护,仓库许可证为 MIT。当前 npm 包版本是 0.6.2,主要语言 TypeScript,engines 字段要求 Node.js >= 20。GitHub 仓库在 2026-08-18 显示 5 星。

它给当前 DSH 进程里的 agent 一组邮件工具:列收件箱、读信、搜索、代发、看文件夹、收发附件。协议走 IMAP 收信、SMTP 发信,不依赖系统 shell,也没有原生二进制;README 写明 Windows / macOS / Linux 同一份 Node 代码。

设置界面挂在 Web UI 上。package.jsondsh.client 声明了 platform: web,并注入 @deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-settings。也就是说:邮件协议本身跨平台,表单配置页面向 dsh web

核心功能

六类工具

README 把能力收成六个工具,名称和职责如下。

工具 作用
email_list 列出文件夹里最新邮件,支持未读过滤、分页;默认只给摘要,不带正文
email_read 按 uid 读一封全文;HTML 会转成纯文本,超长按 maxBodyChars 截断(默认 20000 字)
email_search 服务器端按关键词搜主题 / 发件人 / 收件人 / 抄送;无结果时默认回退扫描最近 30 封正文
email_send 代发邮件,可带附件;默认发信前弹确认,显示收件人、主题和附件数
email_folders 列出 INBOX、已发送、垃圾邮件以及自定义文件夹,把 path 交给其他工具
email_attachment 按序号下载附件;默认落到会话工作区,单文件与总大小受 maxAttachmentBytes 限制(默认 20 MiB)

v0.6.2 的改动主要在搜索和列表顺序:服务器搜索补上 cc;正文回退扫描也匹配 to / cc,单封解析失败不会打断整批;列表按 UID 降序,保证最新在前;email_send 的附件参数校验为路径字符串数组。

仓库 README 给的对话示例是:

帮我看下 QQ 邮箱最新的 10 封未读,把要回复的列出来。

agent 会先走 email_list(未读、最近 10 封),需要正文时再调 email_read。这是文档里的用法说明,不是实测记录。

八种邮箱预设

provider 就会填好 IMAP/SMTP 地址,不必手写主机名。目录页和 README 列出的八个预设一致:

provider IMAP SMTP
qq imap.qq.com:993(SSL) smtp.qq.com:465(SSL)
163 imap.163.com:993 smtp.163.com:465
126 imap.126.com:993 smtp.126.com:465
sina imap.sina.com:993 smtp.sina.com:465
aliyun imap.aliyun.com:993 smtp.aliyun.com:465
gmail imap.gmail.com:993 smtp.gmail.com:465
outlook outlook.office365.com:993 smtp.office365.com:587(STARTTLS)
icloud imap.mail.me.com:993 smtp.mail.me.com:587(STARTTLS)

没有预设也可以手填任意 IMAP/SMTP。显式写的 host / port / secure 优先于预设。

各服务商都要求用授权码或应用专用密码,不要填网页登录密码。README 里的入口是:

  • QQ:设置 → 账户 → 开启 IMAP/SMTP → 生成授权码
  • 163 / 126:设置 → POP3/SMTP/IMAP → 开启 → 新增授权码
  • Gmail:先开两步验证,再到安全页生成应用专用密码
  • Outlook:微软账户安全页的应用密码(部分账号要先开两步验证)

多账号与两种配置入口

一个 tool-email 配置可以挂多个邮箱,调用工具时用 account 参数切换;defaultAccount 是省略该参数时的默认账号。v0.1 的单账号顶层字段(provider / user / password 等)仍可用,作为各账号的共享默认值。

配置有两种,任选其一:

  1. 网页设置(README 推荐):重启 dsh web 后打开 设置 → 邮件 (dsh-email),填邮箱和授权码,点「保存并应用」。页面带「测试连接」。保存值写在 settings.yamldsh-email 命名空间,会覆盖 YAML 里的默认账号;密码字段标成 secret,不会进导出和诊断。
  2. YAML:在 profile 的 cordis.patch.yml 里覆盖 tool-email 这一行。设置页的「多账号(高级,YAML)」文本框也能填账号映射,非空时覆盖 accounts

插件自带空配置,cordis.patch.yml 里插入的是 config: {}。README 写明这样安装不会把启动弄崩;配置完成前调用任何 email_* 工具,会返回明确的配置提示。

安装与启用

目录详情页给出的安装命令是:

dsh plugin add github:STARDUSTLC666/dsh-email

需要可复现安装时,按目录页说明固定 commit。2026-08-18 仓库 main 最新提交为 f24f1ffa6ce4a1369433a1a433fb8078d34b6683(提交于 2026-08-16):

dsh plugin add github:STARDUSTLC666/dsh-email#f24f1ffa6ce4a1369433a1a433fb8078d34b6683

仓库 README 另外写了带 web profile 的装法,和设置页面向 dsh web 这一点一致:

dsh plugin --profile web add dsh-email

装好后重启 dsh web。单账号 YAML 可以写成:

- id: tool-email
  config:
    provider: qq
    user: you@qq.com
    password: 你的授权码

README 更建议把密码放到环境变量 DSH_EMAIL_PASSWORD,不要长期明文写在配置文件里。

没有预设、直连公司邮箱时:

- id: tool-email
  config:
    user: you@corp.example
    password: 你的授权码
    imap: { host: imap.corp.example, port: 993, secure: true }
    smtp: { host: smtp.corp.example, port: 465, secure: true }
    inboxFolder: INBOX

多账号示例:

- id: tool-email
  config:
    accounts:
      work: { provider: qq, user: work@qq.com, password: 授权码1 }
      home: { provider: '163', user: home@163.com, password: 授权码2 }
    defaultAccount: work

downloadDir 可改附件落盘目录;不写的话,默认是会话工作区下的 .dsh-email-downloads,再回退到 $DSH_HOME/email-downloads

典型用法

配置完成后,可以直接用自然语言让 agent 调工具,不必记参数名。和文档一致的几类任务包括:

  • 列出某文件夹最新未读,只看摘要
  • 按 uid 打开一封,HTML 会变成纯文本
  • 按主题、发件人或抄送搜索;服务器没命中时,默认再扫最近 bodySearchLimit 封(默认 30)的正文
  • 列出文件夹路径,再把 path 传给 email_list / email_search
  • 按序号下载附件,让模型在工作区里读文件
  • 起草回复后走 email_send;默认会弹出确认,你批准才真正发出

发信审批是默认打开的(sendApproval: true)。每次发送会走 DSH 审批通道,提示类似「发送邮件给 xx,主题「xx」」。没有审批通道的环境(例如无 UI 的 headless)会直接拒绝发信,这是文档写明的安全默认,不是故障。

还有一个容易踩的点:会话处于 Full Access(完全访问) 时,Harness 的审批策略是 never(不弹确认)。此时 email_send 会被拦截并给出提示。README 给的两条出路是:把访问模式切回 Read Only / Write;或者在设置页关掉「发信前确认」,等于明确接受风险。

适用场景与注意事项

比较适合已经在用 DSH Web、需要 agent 帮忙处理邮箱的人:扫未读、检索附件、起草并经你确认后发出。多账号可以把工作和个人邮箱写在同一行配置里。企业邮局只要提供标准 IMAP/SMTP,也可以手填主机。

下面几条是仓库 README「已知限制」和「安全须知」里已经写明的,安装前值得对照源码看一遍。

不支持 OAuth2。 强制 OAuth 的企业环境(部分 Microsoft 365 / Google Workspace)目前用不了,只能走服务商的应用专用密码或授权码。

正文搜索是折中。 服务器端只搜 subject / from / to / cc。不少服务商(README 点名 QQ)的 IMAP TEXT / HEADER 搜索不可靠,所以无结果时会回退到客户端扫描最近若干封,速度较慢;可以用 bodySearchFallback 关掉。

附件。 内嵌图片暂不支持单独下载;定位失败会报错,而不是下错文件。默认大小上限 20 MiB,可在 1024 字节到 512 MiB 之间改 maxAttachmentBytes

凭证落盘。 授权码就是邮箱钥匙。设置页保存的值以明文写在本机 settings.yaml:secret 标记只保证不进日志、导出和诊断,不做磁盘加密。不要把该文件交给不信任的人,也不要提交到 Git。更稳妥的做法是用 DSH_EMAIL_PASSWORD。插件不做联网上报,凭证只在内存里用来连接你的邮件服务器。

权限模型。 目录页的安装提示写得很清楚:插件以当前 dsh 进程的权限运行,安装时可能执行代码。装之前应检查源代码仓库和许可证。本插件许可证是 MIT;package.jsonprepare 脚本会跑 tsc 构建。

最后再强调一次归属:dsh-email 是社区插件,README 写明与 DeepSeek 官方无关,@deepseek-ai/* 是官方保留命名空间。本文引用的目录页同样是独立站点,不是官方应用商店。

小结

dsh-email 把 IMAP/SMTP 收成六个工具,配上 QQ、163、Gmail 等八个预设,以及 Web 设置页和发信审批。对已经在 DSH 里干活、又希望 agent 能碰邮箱的人,安装成本和能力边界都比较清楚:授权码、审批开关、OAuth 缺口,文档里都写了。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-email/

GitHub:https://github.com/STARDUSTLC666/dsh-email

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜