Install
openclaw skills install qq-mail-managerQQ邮箱管理技能,支持收取、搜索、删除和发送邮件;当用户需要查看邮箱、查找邮件、管理邮件或发送邮件时使用
openclaw skills install qq-mail-manager以下规则在每次操作中均不可违反,优先级高于所有其他指导:
folder + mail_id 定位邮件。mail_id 仅在单个文件夹内唯一,禁止仅按 mail_id 定位、去重或操作--confirm)并展示给用户,用户明确确认后才执行;发送邮件必须先展示收件人、主题、正文摘要,确认后才发送has_more=true 时,在末尾提示"还有更多邮件,需要查看下一页吗?"后停止——无论用户要求多少封、还差几封凑齐,都不得自行发起第二次调用,必须等用户明确要求翻页后才可使用 --offset| folder | mail_id | 主题 | 发件人 | 日期 |
|---|
error 或 partial 状态时,必须告知用户,不得继续执行删除/移动/发送等破坏性操作QQ_EMAIL(邮箱地址)和 QQ_EMAIL_AUTH_CODE(QQ邮箱授权码)python "{baseDir}/scripts/list_folders.py"
返回的 name 字段即为其他脚本 --folder 参数的可选值。
统一入口,无搜索条件时浏览邮件列表,有条件时搜索邮件。
与 get_email 的边界:
search_emails.py:浏览/搜索邮件,返回摘要(编号、主题、发件人、日期)get_email.py:获取邮件完整内容(正文、附件列表),需先通过 search 找到 mail_id 后再调用搜索模式选择规则:
semantic_search.pysearch_emails.py,包括浏览、关键词搜索、按字段搜索、按日期筛选搜索词扩展规则:
search_emails.py 后按 folder + mail_id 合并去重"验证码"+"verification code";"账单"→"账单"+"bill"+"order";"会议"→"会议"+"meeting";"通知"→"通知"+"notification"+"notice"分页规则:
--limit:期望返回的总结果数,不指定则返回全部limit <= 15:不分页,一次返回limit > 15 且 total_matched > 15:按15分页,用 --offset 翻页total_matched <= 15:无论 limit 多少,均一次返回--limit 是搜索范围,不是"必须凑齐的数量"。每次只调一次脚本,展示当页结果,has_more=true 时等用户确认再翻页# 浏览收件箱(不指定limit则返回全部,超过15封自动分页)
python "{baseDir}/scripts/search_emails.py" --folder INBOX
# 限定返回3封
python "{baseDir}/scripts/search_emails.py" --folder INBOX --limit 3
# 模糊搜索(匹配发件人、主题、收件人)
python "{baseDir}/scripts/search_emails.py" --query "会议" --folder INBOX
# 精确按字段搜索
python "{baseDir}/scripts/search_emails.py" --from "zhangsan@qq.com" --subject "通知"
# 日期范围筛选
python "{baseDir}/scripts/search_emails.py" --query "*" --since 2025-01-01 --before 2025-03-01
# 最近2小时的未读邮件
python "{baseDir}/scripts/search_emails.py" --query "*" --recent 2h --unseen
# 跨文件夹搜索
python "{baseDir}/scripts/search_emails.py" --query "验证码" --all-folders
# 翻页
python "{baseDir}/scripts/search_emails.py" --query "会议" --offset 15
仅在用户明确触发时使用。拉取指定文件夹的邮件元数据+正文摘要,供智能体做语义判断。
分类展示格式:每组标题标注分类名+数量,禁止编号范围缩写(如"#12-51"),必须逐封列出:
验证码邮件(3封):
- #12 您的验证码是123456 — noreply@example.com
- #37 验证码通知 — security@bank.com
订阅邮件(2封):
- #8 本周技术周刊 — newsletter@tech.com
# 拉取收件箱最新100封邮件(默认)
python "{baseDir}/scripts/semantic_search.py" --folder INBOX
# 自定义拉取数量
python "{baseDir}/scripts/semantic_search.py" --folder INBOX --limit 50
python "{baseDir}/scripts/get_email.py" --mail_ids <邮件编号> --folder INBOX
python "{baseDir}/scripts/get_email.py" --mail_ids 1,2,3 --folder INBOX
--mail_ids 和 --folder 均为必填,来自搜索结果中的字段。
python "{baseDir}/scripts/download_attachment.py" --mail_ids <编号> --folder INBOX --dir ./downloads
python "{baseDir}/scripts/download_attachment.py" --mail_ids <编号> --folder INBOX --file "报告.pdf"
python "{baseDir}/scripts/mark_email.py" --mail_ids 123 --action read --folder INBOX
python "{baseDir}/scripts/mark_email.py" --mail_ids 1,2,3 --action unread --folder INBOX
--action:read=已读,unread=未读。
删除=移至垃圾箱,不支持永久删除。必须先预览再确认(见关键约束第2条)。
# 预览删除
python "{baseDir}/scripts/move_email.py" --mail_ids 1,2,3 --src_folder INBOX --delete
# 确认删除
python "{baseDir}/scripts/move_email.py" --mail_ids 1,2,3 --src_folder INBOX --delete --confirm
# 预览移动
python "{baseDir}/scripts/move_email.py" --mail_ids 5 --src_folder INBOX --dst_folder "Sent Messages"
# 确认移动
python "{baseDir}/scripts/move_email.py" --mail_ids 5 --src_folder INBOX --dst_folder "Sent Messages" --confirm
发送前必须展示收件人、主题、正文摘要并确认(见关键约束第2条)。
# 发送纯文本邮件
python "{baseDir}/scripts/send_email.py" --to <收件人> --subject "<主题>" --body "<正文>"
# 发送HTML邮件
python "{baseDir}/scripts/send_email.py" --to <收件人> --subject "<主题>" --body "<h1>Hello</h1>" --html
# 从文件读取正文(正文含换行/引号/HTML或超过200字符时优先使用)
python "{baseDir}/scripts/send_email.py" --to <收件人> --subject "<主题>" --body-file ./content.html --html
# 回复邮件
python "{baseDir}/scripts/send_email.py" --reply-to-id <邮件编号> --reply-folder INBOX --body "<回复内容>"
# 回复并引用原文
python "{baseDir}/scripts/send_email.py" --reply-to-id <邮件编号> --reply-folder INBOX --reply-quote --body "<回复内容>"
# 测试SMTP连接
python "{baseDir}/scripts/send_email.py" --test
--query 模糊搜索(匹配发件人、主题、收件人),* 表示不限关键词--from 精确按发件人搜索(优先于 --query)--subject 精确按主题搜索(可与 --from 组合)--folder 邮箱文件夹,默认 INBOX--all-folders 搜索所有文件夹--since 起始日期,含当天(YYYY-MM-DD)--before 截止日期,不含当天(YYYY-MM-DD)--recent 最近时间段(30m/2h/7d/1w),分钟/小时级别做二次精确过滤--seen/--unseen 仅已读/未读(互斥)--limit 期望总结果数,不指定返回全部,≤15不分页,>15按15分页--offset 分页偏移量,默认0--folder(必填), --limit(默认100, 最大100)--mail_ids(必填, 逗号分隔), --folder(必填)--mail_ids(必填, 逗号分隔), --folder(必填), --dir(输出目录, 默认当前目录), --file(仅下载指定附件名)--mail_ids(必填), --action(read/unread), --folder(必填)--mail_ids(必填), --src_folder(必填), --dst_folder(与--delete二选一), --delete(移至垃圾箱, 与--dst_folder二选一), --confirm(确认执行, 不加则仅预览)--to(收件人, 回复模式可省略), --subject(主题, 与--subject-file二选一, 回复模式可省略), --subject-file(从文件读主题), --body(正文, 与--body-file二选一), --body-file(从文件读正文, 优先于--body), --html(HTML格式), --cc(抄送), --bcc(密送), --attachments(附件路径), --reply-to-id(回复邮件编号), --reply-folder(回复时必填), --reply-quote(引用原文), --test(测试SMTP)folder + mail_id 组合去重,不同文件夹中相同 mail_id 视为不同邮件--all-folders)会遍历所有文件夹,文件夹较多时耗时较长--body-file 从文件读取,避免命令行转义问题--subject-file