Repository navigation
Releases
Releases · zhengjy01/dsh-qqmail
v0.1.0 — QQ Mail / agent email plugin
First public release.
QQ Mail — and any IMAP/SMTP mailbox — for DeepSeek Harness: 12 qqmail_* agent tools over IMAP/SMTP with a QQ Mail authorization code (no OAuth, no 2FA redirect), plus a qqmail CLI, a qqmail-mcp stdio MCP server, and a QQ 邮箱 web settings panel. The tool specs are defined once and reused by all three surfaces, so the agent, the CLI and the settings panel cannot drift.
Install
# from npm
dsh plugin --profile web add @zhengjunyao/dsh-qqmail
# from GitHub (this repo carries the `dsh-plugin` topic)
dsh plugin --profile web add github:zhengjy01/dsh-qqmailRestart dsh web, open Settings → QQ 邮箱, enter your address and the 16-digit authorization code, then run qqmail_status probe: true.
For agents that cannot host a DSH plugin: npx @zhengjunyao/dsh-qqmail qqmail-mcp.
Added
- Agent tools (
qqmail_*):status,config,folders,list,search,read,attachmentare always registered;send,reply,mark,move,deleteregister only whenreadOnlyis off. - CLI (
qqmail): every tool as a command, with--jsonfor structured output, andQQMAIL_AUTH_CODE/--auth-code -so the authorization code never lands in the process list. - MCP stdio server (
qqmail-mcp): the same tool definitions exposed over JSON-RPC for other agents, with stdout reserved strictly for the transport. - Web settings panel (「QQ 邮箱」): provider preset, address, authorization code, behaviour switches, real connect check, inbox quick-look, compose box.
- Provider presets: QQ Mail, Tencent Exmail, 163, 126, Gmail, Outlook, plus a fully custom IMAP/SMTP endpoint.
- IMAP layer: pooled, serialized session per account with idle close; special-folder resolution via
SPECIAL-USEwith a name-matching fallback; header-only fetches withBODYSTRUCTURE; single-part body previews; flag stores, moves, trash-vs-permanent deletion, andAPPENDfor the Sent copy. - SMTP layer: one MailComposer build reused for both delivery and the Sent append (so both copies share a
Message-ID), STARTTLS enforcement on non-secure ports, and explicit size caps. - Search semantics: ASCII terms go to the server; non-ASCII terms are filtered over a recent window locally and reported as
mode: "local". - Tests: 90 unit assertions, 68 end-to-end assertions over real sockets against in-process fake SMTP/IMAP servers, and 37 CLI/MCP assertions.
- Portability gate:
pnpm run verifyinstalls the packed tarball into an isolatedDSH_HOME, boots an instance, checks the health route and the client bundle, and watches for late startup failures.
Compatibility
- DSH:
>=0.1.5-rc.1 - Node:
^22.19.0 || >=24.0.0 - DSH peer:
^0.1.0-rc.6 || ^0.1.1-rc.1 || ^0.1.2-alpha.1 || ^0.1.5-rc.1
Full changelog: https://github.com/zhengjy01/dsh-qqmail/blob/main/CHANGELOG.md