DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

@zhengjunyao/dsh-qqmail

Qqmail

适用于 DeepSeek Harness 的 QQ Mail(以及任何 IMAP/SMTP 邮箱):注册 qqmail_* 代理工具,通过 IMAP/SMTP 和 QQ Mail 授权码列出、搜索、读取、发送、回复、标记和下载邮件(无需 OAuth,无需 2FA 重定向),并提供基于同一核心的 `qqmail` CLI 和 `qqmail-mcp` stdio MCP 服务器,over the s

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add @zhengjunyao/dsh-qqmail@0.1.0
README兼容性版本

说明

适用于 DeepSeek Harness 的 QQ Mail(以及任何 IMAP/SMTP 邮箱):注册 qqmail_* 代理工具,通过 IMAP/SMTP 和 QQ Mail 授权码列出、搜索、读取、发送、回复、标记和下载邮件(无需 OAuth,无需 2FA 重定向),并提供基于同一核心的 `qqmail` CLI 和 `qqmail-mcp` stdio MCP 服务器,以及 Web 设置面板

兼容性与来源证明

Qqmail 以 @zhengjunyao/dsh-qqmail 发布,当前版本为 0.1.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/9/16

版本

0.1.0stable
2026/9/16

相关插件

正在加载相关插件…

最新版
0.1.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
311.9 kB
文件数
32
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 0
周下载
0
最近提交
2026/9/16
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 integrations-communication 分类下经过校验的插件。

Remote Bridge@linxin666/dsh-remote-bridgeDSH 远程桥接:主机端通过唯一且精确的 /ios/v1 WebSocket 路由提供协议 v1——会话列表、历史记录基线、提示、包含工具活动的实时回合增量、中断以及进程内代理审批——连接到通过一次性配对的设备Im@xmanrui/dsh-im将微信、飞书、企微、钉钉、QQ、Telegram、WhatsApp、Slack、Discord 和 Matrix 接入 DSH。Ds Botds-botDS Bot:DeepSeek Harness 的一组长期运行的 Bot,支持主 Bot、Bot 间消息和群聊Free Searchdsh-free-searchDeepSeek Harness 的免费网页搜索:27 个引擎(Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel/You.com 无需密钥;通过 MCP 支持 Zhihu 全局/站内搜索,以及 Perplexity/SerpBase/DeepSeek(官方 + 原生工具/搜索)/Baidu/Kimi/Aliyun/Douba)

README

@zhengjunyao/dsh-qqmail

A QQ Mail (and any IMAP/SMTP mailbox) plugin for DeepSeek Harness — the agent's mailbox. It registers qqmail_* agent tools that list, search, read, send, reply to, flag, move, delete and download mail over plain IMAP/SMTP, and ships two more entry points over the same core: a qqmail CLI and a qqmail-mcp stdio MCP server for other agents.

Authentication is a provider authorization code, not OAuth: enable IMAP/SMTP in the QQ Mail web console, generate a 16-character code, and paste it in. No OAuth application, no 2FA redirect, no browser round trip.

  • Read tools (qqmail_status, qqmail_config, qqmail_folders, qqmail_list, qqmail_search, qqmail_read, qqmail_attachment) are always registered.
  • Write tools (qqmail_send, qqmail_reply, qqmail_mark, qqmail_move, qqmail_delete) are not registered at all while readOnly is on (the default), so nothing can send or delete by accident.
  • Deletion defaults to moving into the Trash folder. Permanent \Deleted + EXPUNGE requires an explicit permanent: true.
  • The authorization code never reaches the model: tool results and the web panel only ever show a mask.

Getting the QQ Mail authorization code

  1. Open QQ Mail in a browser → 设置 / Settings → 账号 / Account.
  2. Find IMAP/SMTP服务 → enable it (a verification step is required).
  3. Copy the generated 16-character authorization code.
  4. Configure the plugin with it:
qqmail_config  email: "someone@qq.com"  authCode: "<the 16-character code>"

Then verify with qqmail_status probe: true — it connects to both servers for real and reports which side failed, in plain language (a wrong password vs. a missing service toggle are different messages).

The authorization code is not your QQ password. It can be revoked in the same screen without touching your account.

Installation

# from a GitHub repo tagged with the `dsh-plugin` topic
dsh plugin --profile web add github:zhengjy01/dsh-qqmail

# or from npm
dsh plugin --profile web add @zhengjunyao/dsh-qqmail

# local development
dsh plugin --profile web add link:/path/to/dsh-qqmail

Restart dsh web afterwards; the plugin appears as the QQ 邮箱 card in Settings.

The three entry points

1. Agent tools (the main one)

Twelve qqmail_* tools, described in the system prompt so the model knows they exist:

ToolWhat it does
qqmail_statusConfig + probe: true for a real IMAP/SMTP connection check
qqmail_configSet address, authorization code, provider preset, switches
qqmail_foldersList folders with message/unseen counts
qqmail_listNewest-first listing of a folder
qqmail_searchSearch by sender / recipient / subject / body / date / unread / flagged / size
qqmail_readRead one or many messages in full (batch uids is much faster)
qqmail_attachmentDownload attachment N of a message to disk
qqmail_sendSend a message (files as attachments)
qqmail_replyReply with Re:, In-Reply-To, References and a quoted original
qqmail_markRead/unread, starred/unstarred
qqmail_moveMove between folders
qqmail_deleteMove to Trash (default) or delete permanently

2. CLI

qqmail status --probe
qqmail folders
qqmail list --mailbox INBOX --limit 20 --unseen
qqmail search --from finance --since 2026-09-01
qqmail read 12345 12346
qqmail send --to a@b.com --subject "Hi" --text "Body" --attach ./report.pdf
qqmail reply 12345 --text "收到"
qqmail mark 12345 --seen --flag
qqmail move 12345 --to "Archive"
qqmail delete 12345

Every command accepts --json for the structured payload. The CLI reads the same <DSH_HOME>/dsh-qqmail.json, so configuring the mailbox once is enough — and QQMAIL_AUTH_CODE (or --auth-code - reading stdin) keeps the secret out of the process list.

3. MCP stdio server

For agents that cannot host a DSH plugin:

// Claude Code / Codex / any MCP client
{
  "mcpServers": {
    "qqmail": {
      "command": "npx",
      "args": ["-y", "@zhengjunyao/dsh-qqmail", "qqmail-mcp"]
    }
  }
}

npx @zhengjunyao/dsh-qqmail qqmail-mcp runs the server directly; bin also exposes it as qqmail-mcp. Tool schemas are generated from the same definitions the DSH tools use, so the two never drift. Only stderr carries diagnostics — stdout belongs to the JSON-RPC transport.

Write tools follow the configured readOnly switch; pass --allow-write to expose them regardless.

Configuration

Stored in <DSH_HOME>/dsh-qqmail.json (mode 0600; DSH_HOME defaults to ~/.dsh).

KeyDefaultMeaning
presetinferred from the addressqq / qq-exmail / 163 / 126 / gmail / outlook / custom
email—Full address; also the IMAP/SMTP login
authCode—Provider authorization code (the secret)
imapHost / imapPort / imapSecurepresetOverride the IMAP endpoint
smtpHost / smtpPort / smtpSecurepresetOverride the SMTP endpoint
smtpRequireTlstrueRefuse to send over a non-upgraded plaintext session
fromName / signature''Display name and plain-text signature
sentFolderauto-detectWhere the Sent copy is appended
downloadDir<DSH_HOME>/dsh-qqmail/attachmentsDefault attachment directory
readOnlytruefalse registers the write tools
timeoutMs30000Connect / command budget
maxParseMb / maxSendMb40Size caps in both directions
previewInListfalseInclude a body preview in listings
saveSenttrueAppend a copy of outgoing mail to Sent

Provider presets and their credential instructions are in src/core/presets.ts. Enterprise QQ Mail (exmail) uses a custom domain, so its preset must be selected explicitly.

Behaviour worth knowing

  • Chinese search terms are filtered locally. RFC 3501 SEARCH has no charset negotiation QQ Mail honours in practice, so a Chinese keyword would come back as a silent zero-match. Those searches scan a recent window (about 400 messages) in-process and report mode: "local".
  • An ASCII body search that matches nothing is re-checked locally. Non-ASCII bodies are MIME-encoded, so an ASCII word inside a Chinese body is invisible to the server. Reporting "no matches" there would be a false negative.
  • hasAttachments in listings is structural. ImapFlow's parsed BODYSTRUCTURE does not expose content-disposition, so the flag is derived from part types, name parameters and Content-IDs. The authoritative attachment list comes from qqmail_read.
  • Connections are pooled and serialized. One IMAP connection per account, commands serialized (IMAP has a single selected mailbox per connection), closed after 60 s idle; the CLI closes it immediately.
  • Sent copies reuse the exact bytes that were sent, so the archived message has the same Message-ID as the delivered one and threads correctly in other clients.

Security notes

  • The authorization code is written to <DSH_HOME>/dsh-qqmail.json with mode 0600. It is never returned by a tool, a route or the panel, and never logged.
  • Write tools are absent from the registry while readOnly is on — not merely refused at call time.
  • TLS certificates are verified; the plugin does not offer an "ignore certificate errors" switch. smtpRequireTls only exists for servers that genuinely speak plaintext (a local relay).
  • Deletion is a move to Trash unless permanent: true is passed explicitly.

Development

pnpm install
pnpm run build          # tsc --noEmit declarations + tsdown + shebang/chmod postbuild
pnpm run typecheck
pnpm test               # 90 unit + 68 end-to-end + 37 CLI/MCP assertions
pnpm run verify         # portability gate (isolated DSH_HOME, real install)

The end-to-end suites drive the real code over real sockets against the in-process fake SMTP/IMAP servers in tests/fakes.mjs, so session pooling, envelope parsing, body-part previews, flag stores, folder moves, the Sent append and attachment download are all exercised without touching a real mailbox.

See PORTABILITY-SOP.md for the release gate this plugin is verified against.

License

MIT