dingtalk-mail
钉钉邮箱读写、搜索、回复与转发。Use when 用户说发邮件/查邮件/回邮件/转发邮件/未读邮件/邮件搜索/邮箱附件。一句话发邮件时先用 dingtalk-contact 解析并确认收件人,再由本 skill 发送;不做钉钉消息(走 dingtalk-chat)、紧急通知(走 dingtalk-misc)。命令前缀:dws mail。
How do I install this agent skill?
npx skills add https://github.com/dingtalk-real-ai/dingtalk-workspace-cli --skill dingtalk-mailIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill facilitates DingTalk email management through the dws CLI tool. It defines clear procedures for handling emails and attachments. The main security findings relate to the processing of untrusted email content (indirect prompt injection surface) and the execution of a local utility via Python scripts.
- Socketpass
No alerts
- Snykwarn
Risk: MEDIUM · 1 issue
What does this agent skill do?
钉钉邮箱 Skill
前置条件 — 执行操作前必读
**CRITICAL — 执行任何
dws操作前,MUST 先用 Read 工具完整读取dingtalk-shared。**该轻量文件包含全局执行契约、安全底线及 shared references 的按需加载导航;不要预加载其全部 references。
<!-- VISIBLE_SHORTCUTS_START -->命令参考:mail.md。复杂搜索、附件、批量处理、草稿等多步邮件场景参考:09-mail.md。
Shortcuts(无专用脚本/recipe 时优先)
以下 shortcut 同时进入公开 catalog 与 Runtime Schema。按本 skill/recipe 路由,命中时 Shortcut 优先于原子命令。参数只查 dws schema --cli-path "mail +<shortcut>" --compact --jq '{cli_path,parameters,constraints,confirmation}' -f json;仅需且已发布 result 时查 --jq '{cli_path,outcomes:.result.outcomes,pagination}',字段级再查 data_schema;缺失不以 Help/样例推断。Schema 不可用才读一次已知 leaf Help;unknown flag 用同 leaf Help 修正一次。unknown command 禁 Help:错误 suggestion → 已加载 Skill/reference 明确入口;均无则报漂移。禁全 Catalog/root/parent/product Help;仅映射、接口或 provenance 审计省略 --compact。现有路由和 reference 均无法定位低频能力时,才用 dws shortcut list --service mail --format json 发现。
| Shortcut | 风险 | 适用场景 |
|---|---|---|
dws mail +find-mail-user | read | 按关键词搜索邮箱联系人并投影列表(姓名/昵称/邮箱/工号等) |
dws mail +folder-list | read | 列出顶层文件夹或指定父文件夹下的子文件夹 |
dws mail +message | read | 读取一封邮件的完整正文与附件元数据 |
dws mail +messages | read | 按请求顺序读取多封邮件并逐封验证身份 |
dws mail +search-mail | read | 按 KQL 关键词搜索邮件并投影列表(主题/发件人/时间/messageId) |
dws mail +thread | read | 读取完整邮件会话并精确验证 conversationId |
dws mail +triage | read | 列出或筛选邮件摘要,自动解析邮箱与收件箱 |
dws mail +user-search | read | 按关键词或工号搜索邮箱用户(仅企业邮箱) |
意图表
| 用户说 | 命令 |
|---|---|
| "发邮件给 a@b.com" | dws mail mailbox list --format json → dws mail message send --from <邮箱> --to a@b.com --subject "<标题>" --content "<正文>" --format json |
| "回复 / 全部回复 / 转发" | dws mail message reply / reply-all / forward |
| "今天未读邮件" | python scripts/mail_unread_summary.py |
| "带抄送发送" | python scripts/mail_send_with_cc.py --to a@b.com --cc c@d.com --subject "<标题>" --body "<正文>" |
标准 SOP(必遵流程)
命中以下意图必须按对应 SOP 顺序执行;禁止跳步、替换命令、编造 email/messageId。每条命令必须带
--format json。收件邮箱必须真实解析,禁止猜测。
SOP-1 拿邮箱(get-mailbox)
触发:我的邮箱/发件需要邮箱/查邮件需要邮箱。
- 执行(必须):
dws mail mailbox list --format json,取自己的email(默认选企业邮箱type:ORG);查他人邮箱用dws mail user search --keyword "<姓名>" --format json,禁止用mailbox list查他人。
禁止:把 mailbox list 当作他人邮箱查询、猜测邮箱地址。
SOP-2 查 / 搜邮件(search-mail)
触发:查邮件/搜邮件/某主题邮件/某人发的邮件。
- 拿邮箱(必须):先按 SOP-1 取
email;用户已明确提供可跳过。 - 执行(必须):浏览文件夹
dws mail message list --email <邮箱> --limit <n> --format json;KQL 搜索dws mail message search --email <邮箱> --query "<KQL>" --limit 20 --format json(KQL 如subject:周报、from:alice@x.com、folderId:2、hasAttachments:true,只通过--query传)。 - 取正文(必须):
dws mail message get --email <邮箱> --id <messageId> --format json;messageId从列表/搜索结果取,禁止编造。
禁止:把 KQL 拆成多个 flag、跳过 message list/search 直接猜 messageId。
SOP-3 发邮件(send-mail)
触发:发邮件/写邮件/群发。
- 发件邮箱(必须):
dws mail mailbox list取自己邮箱。 - 收件邮箱(必须):地址直接用;姓名按 mail.md "查找他人邮箱地址"流程(
mail user search等)获取,禁止猜测。 - 执行(必须):
dws mail message send --from <发件邮箱> --to <收件邮箱> --subject "<主题>" --content "<正文>" --format json;按需--cc/--attachment/--inline-attachment。 - 验证(必须):从发送返回取真实
internetMessageId,执行dws mail message verify --email <发件邮箱> --internet-message-id <internetMessageId> --format json查发送状态;不要把普通messageId传给 verify。
禁止:猜测收件邮箱、发送后不确认状态就答复"已发送"。
SOP-4 回复 / 转发(reply-forward)
触发:回复邮件/回复全部/转发。
- 拿邮箱 + 原邮件(必须):SOP-1 取邮箱;用户未给
messageId时必须先走 SOP-2 定位原邮件messageId。 - 执行(必须):回复
dws mail message reply --from <邮箱> --id <messageId> --content "<正文>" --format json;回复全部用reply-all;转发dws mail message forward --from <邮箱> --to <收件邮箱> --id <messageId> --content "<附言>" --format json。
禁止:未定位原邮件就回复/转发、编造 messageId。
高频硬约束
- 用户要"完整内容/看看这封邮件/正文"时,
message search命中后必须继续调用dws mail message get --email <邮箱> --id <messageId> --format json;不要只列候选后停下。 - 搜到多封邮件时,若用户给了明确主题、附件名、发件人或时间线索,先选最匹配的一封执行
message get;只有同等候选无法判断时才询问用户。 - 附件链路固定三步:
message search→attachment list --email <邮箱> --id <messageId>→attachment download --email <邮箱> --message-id <messageId> --attachment-id <attachmentId> --name <文件名>;不存在批量下载命令。 - 写入类操作(发送、回复、转发、删除、批量移动)按安全策略确认;只读查看、搜索、附件列表、下载不需要确认。
- 所有
dws mail命令加--format json,并复用同一封邮件的messageId,不要重新搜索导致目标漂移。
轨迹高频直达规则
- 已被本页或
09-mail.md精确覆盖的命令,直接执行;不要先探测contact、api、auth、profile、Help 或 Schema。仅在命令真实报参数错误后,读取该命令的 leaf Help 一次。 - 多条件 KQL 必须用显式
AND,例如收件箱附件邮件:hasAttachments:true AND folderId:2;不要把相邻条件当作隐式 AND。 - 用户只要首个或任一单附件时,初始搜索后按相关性最多检查 3 个候选的
attachment list,下载命中附件并做一次本地存在性/大小检查后停止;若均未命中,只能说明已检查范围并询问是否继续翻页,不能断言不存在。用户要求全部/批量附件时,遍历全部匹配页和邮件,再逐个下载每个附件。 - “创建邮箱联系人”属于邮箱个人通讯录,固定走
dws mail contact create/list,不要切到dingtalk-contact。只有“按人名解析邮件收件地址”才走下方跨产品协作。 - 用户要求用当前时间生成唯一标题且未指定显示格式时,使用紧凑格式
date +%H%M%S;只有用户明确要求HH:mm:ss等格式时才原样保留。 - 批量删除邮件或将整会话移入已删除前,先展示精确目标和不含确认参数的命令预览并停止;用户明确确认后,执行流程仅对同一组参数追加
--yes。操作成功后只做一次针对原 ID 或唯一主题的回读,结果符合预期即停止。 - 创建类返回了
messageId、contactId或internetMessageId时,后续直接复用返回 ID;不要为了重新定位目标而做宽泛 list/search。 - 一次精确回读已经证明目标状态后结束任务;若回读冲突,报告冲突和已执行命令,不扩大到低层 API 或其他产品继续试探。
跨产品协作
- 收件人是人名 → 先用
dingtalk-contact取orgAuthEmail - 钉钉内消息 → 切到
dingtalk-chat
局部意图与短流程
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/dingtalk-real-ai/dingtalk-workspace-cli/dingtalk-mail">View dingtalk-mail on skillZs</a>