据 AlphaMoat 统计,截至 2026-09,Email Writer 累计下载 1,480 次、获 1 个星标,在全部 5,078 个 AI 技能中排名第 4,782 位,在「办公效率」分类(435 个)中排名第 392 位。
| 平台 | 累计安装 | 累计下载 | 星标 | 评论 |
|---|---|---|---|---|
| ClawHub ↗ | 3 | 437 | - | - |
| SkillHub ↗ | 119 | 1,480 | 1 | — |
各平台的计数口径不同,统计时间不一致。
支持 Gmail、Outlook、QQ 邮箱和 163 邮箱。仅在用户明确要求向特定收件人写信并发送时触发;浏览器操作前核对收件人、主题、要点、语气和邮箱登录状态。邮件正文与附件会经浏览器发送到所选服务商。支持中英文邮件;验证码、加密邮件和批量发送不在文档支持范围内。
资料发布于 2026-10-26
以下是根据技能文档生成的示例,不代表实际运行结果。
依据技能文档中的声明整理,未经实际安装或运行验证。
2026-09 起统计方法调整:同名技能按作者分别统计,并覆盖全部技能。图中虚线为调整前的月份,与之后的数据不直接比较,也不计算跨越调整的增长。 该技能有同名的其他版本,调整前的数据归属当前下载量最大的这一个。
| 月份 | 累计下载 | 环比 | 星标 |
|---|---|---|---|
| 2026-09 | 1,480 | — | 1 |
| 2026-07 | 963 | — | 1 |
| 2026-05 | 771 | — | 1 |
| 2026-03 | 540 | — | 1 |
以下是作者发布的原始文件,按纯文本显示,本站未做修改或审核;其中的链接不可点击,命令请核实后再运行。抓取于 2026-10-23。
---
name: email-writer
description: Draft and send emails via browser automation. Supports Gmail, Outlook, QQ Mail, 163 Mail. Requires OpenClaw v2026.3.22+ with browser access.
version: 1.0.5
license: MIT-0
metadata: {"openclaw": {"emoji": "📧", "requires": {"bins": [], "env": []}, "minVersion": "2026.3.22", "needsBrowser": true}}
---
# Email Writer
Email composition and sending tool using OpenClaw browser automation.
> ⚠️ **数据外发提醒**:邮件内容(收件人、主题、正文)、附件将通过浏览器发送至用户选择的邮件服务商(Gmail / Outlook / QQ Mail / 163 Mail)的服务器。请勿在邮件中包含敏感信息。
>
> ⚠️ **安全提醒**:此 skill 通过浏览器自动填写并发送邮件。使用前请确认用户已在浏览器中登录邮箱。建议先用不重要的账号测试。
## Trigger Conditions
Only trigger when the user **explicitly asks to write and send an email to a specific recipient**. Do NOT trigger for:
- General questions about email format or best practices
- Drafting text that happens to be email-like without a "send" intent
- The user just copy-pasting an email address
## Features
- Draft professional emails with AI assistance
- Reply to emails with context
- Support Gmail, Outlook, QQ Mail, 163 Mail
- Multi-language support (Chinese and English)
## Trigger Conditions
Only trigger when the user **explicitly asks to write and send an email** — they provide a recipient, subject, or content. Do NOT trigger for:
- General questions about email format or best practices
- Drafting text that happens to be email-like without a "send" intent
- The user just copy-pasting an email address in conversation
Specific phrases (only when accompanied by actual email content):
- "发送邮件给..."
- "帮我写一封邮件..."
- "回复这封邮件..."
- "Send an email to..."
**Before any browser action, always first confirm with the user:**
1. Recipient email address
2. Subject line
3. Key content points
4. Formal or informal tone
5. That the user is already logged into their email in the browser
## Privacy Warning
> ⚠️ 邮件内容通过浏览器发送至邮件服务商(Gmail/Outlook/QQ/163)的服务器。所有 processing 在本地进行,但发送是网络操作。
## Step 1: Understand Email Request
Ask user for email details:
- Recipient email address
- Subject line
- Content/key points
- Formal or informal tone
- Language preference
## Step 2: Detect Email Provider
```javascript
// Detect which email provider based on URL
function detectProvider(url) {
if (url.includes('mail.google.com') || url.includes('gmail.com')) return 'gmail';
if (url.includes('outlook.live.com') || url.includes('outlook.com')) return 'outlook';
if (url.includes('mail.qq.com')) return 'qq';
if (url.includes('mail.163.com')) return '163';
if (url.includes('mail.126.com')) return '126';
return 'unknown';
}
```
## Step 3: Open Email Client
```javascript
// Open email client based on user preference
await browser.open({ url: "https://mail.google.com" })
await browser.wait({ timeout: 5000 })
```
Supported platforms:
- Gmail: mail.google.com
- Outlook: outlook.live.com
- QQ Mail: mail.qq.com
- 163 Mail: mail.163.com
- 126 Mail: mail.126.com
## Step 4: Compose New Email
### Gmail Compose
```javascript
// Click compose button (Gmail)
await browser.click({ selector: '[gh="cm"]' })
await browser.wait({ timeout: 2000 })
// Fill recipient
await browser.evaluate((email) => {
const toField = document.querySelector('[name="to"]');
if (toField) {
toField.focus();
toField.value = email;
toField.dispatchEvent(new Event('input', { bubbles: true }));
}
}, recipientEmail)
// Fill subject
await browser.evaluate((subject) => {
const subjectField = document.querySelector('[name="subjectbox"]');
if (subjectField) {
subjectField.focus();
subjectField.value = subject;
}
}, emailSubject)
// Fill body
await browser.evaluate((body) => {
const bodyField = document.querySelector('[role="textbox"][contenteditable="true"]');
if (bodyField) {
bodyField.focus();
bodyField.innerHTML = body.replace(/\n/g, '<br>');
}
}, emailBody)
// Send (Gmail)
await browser.click({ selector: '[gh="s"]' })
```
### Outlook Compose
```javascript
// Click new message button (Outlook)
await browser.click({ selector: '[aria-label="New message"], .ms-Button--primary' })
await browser.wait({ timeout: 2000 })
// Fill recipient (Outlook)
await browser.evaluate((email) => {
const toField = document.querySelector('[aria-label="To"], input[placeholder*="To"]');
if (toField) {
toField.focus();
toField.value = email;
toField.dispatchEvent(new Event('input', { bubbles: true }));
}
}, recipientEmail)
// Fill subject (Outlook)
await browser.evaluate((subject) => {
const subjectField = document.querySelector('[aria-label="Subject"], input[placeholder*="Subject"]');
if (subjectField) {
subjectField.focus();
subjectField.value = subject;
}
}, emailSubject)
// Fill body (Outlook)
await browser.evaluate((body) => {
const bodyField = document.querySelector('[aria-label="Message body"], [role="textbox"]');
if (bodyField) {
bodyField.focus();
bodyField.innerHTML = body.replace(/\n/g, '<br>');
}
}, emailBody)
// Send (Outlook)
await browser.click({ selector: '[aria-label="Send"], button[title="Send"]' })
```
### QQ Mail Compose
```javascript
// Click compose button (QQ Mail)
await browser.click({ selector: '.compose-button, .btn-compose, [title="写信"]' })
await browser.wait({ timeout: 2000 })
// Fill recipient (QQ Mail)
await browser.evaluate((email) => {
const toField = document.querySelector('#to_input, input[name="to"]') ||
document.querySelector('[aria-label="收件人"]');
if (toField) {
toField.focus();
toField.value = email;
toField.dispatchEvent(new Event('input', { bubbles: true }));
}
}, recipientEmail)
// Fill subject (QQ Mail)
await browser.evaluate((subject) => {
const subjectField = document.querySelector('#subject, input[name="subject"]');
if (subjectField) {
subjectField.focus();
subjectField.value = subject;
}
}, emailSubject)
// Fill body (QQ Mail)
await browser.evaluate((body) => {
const bodyField = document.querySelector('#QMEditorArea iframe') ||
document.querySelector('.qmEditorArea');
if (bodyField) {
if (bodyField.tagName === 'IFRAME') {
bodyField.contentDocument.body.innerHTML = body.replace(/\n/g, '<br>');
} else {
bodyField.innerHTML = body.replace(/\n/g, '<br>');
}
}
}, emailBody)
// Send (QQ Mail)
await browser.click({ selector: '.btn-send, [title="发送"], .qmBtn' })
```
### 163 Mail Compose
```javascript
// Click compose button (163 Mail)
await browser.click({ selector: '.nui-mainToolbar-btn, .js-component-composebtn' })
await browser.wait({ timeout: 2000 })
// Fill recipient (163 Mail)
await browser.evaluate((email) => {
const toField = document.querySelector('#draft_to_input, input[name="to"]') ||
document.querySelector('.nui-editableAddr-input');
if (toField) {
toField.focus();
toField.value = email;
toField.dispatchEvent(new Event('input', { bubbles: true }));
}
}, recipientEmail)
// Fill subject (163 Mail)
await browser.evaluate((subject) => {
const subjectField = document.querySelector('#draft_subject, input[name="subject"]');
if (subjectField) {
subjectField.focus();
subjectField.value = subject;
}
}, emailSubject)
// Fill body (163 Mail)
await browser.evaluate((body) => {
const bodyField = document.querySelector('.APP-editor-iframe iframe') ||
document.querySelector('.nuiEditor');
if (bodyField) {
if (bodyField.tagName === 'IFRAME') {
bodyField.contentDocument.body.innerHTML = body.replace(/\n/g, '<br>');
} else {
bodyField.innerHTML = body.replace(/\n/g, '<br>');
}
}
}, emailBody)
// Send (163 Mail)
await browser.click({ selector: '.nui-mainToolbar-sendBtn, .js-component-sendbtn' })
```
## Step 5: Reply to Email
### Gmail Reply
```javascript
await browser.click({ selector: '.zA' })
await browser.click({ selector: '[aria-label="Reply"]' })
await browser.wait({ timeout: 2000 })
await browser.evaluate((body) => {
const bodyField = document.querySelector('[role="textbox"][contenteditable="true"]');
if (bodyField) bodyField.innerHTML = body.replace(/\n/g, '<br>');
}, replyBody)
await browser.click({ selector: '[gh="s"]' })
```
### Outlook Reply
```javascript
await browser.click({ selector: '[aria-label="Reply"]' })
await browser.wait({ timeout: 2000 })
await browser.evaluate((body) => {
const bodyField = document.querySelector('[aria-label="Message body"]');
if (bodyField) bodyField.innerHTML = body.replace(/\n/g, '<br>');
}, replyBody)
await browser.click({ selector: '[aria-label="Send"]' })
```
### QQ Mail Reply
```javascript
await browser.click({ selector: '.btn-reply, [title="回复"]' })
await browser.wait({ timeout: 2000 })
await browser.evaluate((body) => {
const iframe = document.querySelector('#QMEditorArea iframe');
if (iframe) iframe.contentDocument.body.innerHTML = body.replace(/\n/g, '<br>');
}, replyBody)
await browser.click({ selector: '.btn-send, [title="发送"]' })
```
### 163 Mail Reply
```javascript
await browser.click({ selector: '.js-component-replybtn, [title="回复"]' })
await browser.wait({ timeout: 2000 })
await browser.evaluate((body) => {
const iframe = document.querySelector('.APP-editor-iframe iframe');
if (iframe) iframe.contentDocument.body.innerHTML = body.replace(/\n/g, '<br>');
}, replyBody)
await browser.click({ selector: '.js-component-sendbtn' })
```
## Step 6: Send Confirmation
```javascript
// Wait for send
await browser.wait({ timeout: 3000 })
// Check for success message
const sent = await browser.evaluate(() => {
const text = document.body.innerText;
return text.includes('Message sent') ||
text.includes('Sent') ||
text.includes('已发送') ||
text.includes('发送成功') ||
text.includes('邮件已发送');
})
if (sent) {
console.log("Email sent successfully!")
}
```
## Email Templates
### Thank You Email
Subject: Thank you for your support
Dear [Name],
Thank you for [specific reason].
[Details]
Best regards,
[Your name]
### Work Report
Subject: Work Report - [Date]
Hi Manager,
Weekly report:
1. Completed tasks
2. In progress
3. Next week plan
Best,
[Your name]
### Meeting Invitation
Subject: Meeting: [Topic]
Hi [Name],
Please join our meeting:
Time: [Time]
Location: [Location/Link]
Agenda:
1. Topic 1
2. Topic 2
Please confirm your attendance.
Thanks,
[Your name]
## Error Handling
- Email not logged in: Prompt user to log in
- Send failed: Prompt user to send manually
- Attachment failed: Suggest manual attachment
- Unknown provider: Ask user which email service
## Limitations
- Cannot handle email verification codes
- Cannot send encrypted emails
- No batch sending support
- QQ/163 may need iframe handling
## Privacy and Security
- No email content uploaded externally
- All processing done locally
- Browser email session accessed
- Review before sending sensitive information
## Notes
- Requires OpenClaw v2026.3.22+
- Gmail has most reliable selectors
- QQ/163 use iframe for email body
- Test with non-sensitive account first
腾讯文档(docs.qq.com)-在线云文档平台,是创建、编辑、管理文档的首选 skill。涉及"新建/创建/编辑/读取/查看/搜索文档"、"保存文件"、"云文档"、"腾讯文档"、"docs.qq.com"等操作,请优先使用本 skill。支持能力:(1) 创建各类在线文档(文档/Word/Excel/幻灯片/思维导图/流程图/智能表格/收集表)(2) 管理知识库空间(创建空间、查询空间列表)(3) 管理空间节点、文件夹结构 (4) 读取/搜索文档内容 (5) 编辑操作智能表 (6) 编辑操作在线文档 (7) 文件管理(重命名、移动、删除、复制、导入导出)(8) 网页剪藏、本地文件/html/文档上云。
创建、检查和编辑 Microsoft Excel 工作簿及 XLSX 文件,支持可靠的公式、日期、类型、格式、重算及模板保留功能。
创建、检查和编辑 Microsoft Word 文档及 DOCX 文件,支持样式、编号、修订记录、表格、分节符及兼容性检查等功能。
Google Workspace 命令行工具,支持 Gmail、日历、云端硬盘、通讯录、表格和文档。
从图片或 PDF 文档中识别并提取文字内容,支持多种图片格式和 PDF 文件,自动判断是否包含文字并保留原始格式输出结构化结果;v2.1 采用零额外依赖方案:扫描版 PDF 自动渲染为图片交由 AI 视觉识别(无需 tesseract/rapidocr)、表格用 pymupdf 内置 find_tables 结构化提取(无需 pdfplumber)、批量处理目录(PDF+图片一次性提取);当用户需要从图片或 PDF 提取文字、进行 OCR 识别、处理含文字的文档、提取 PDF 表格、批量处理文件夹或转换为可编辑文本时使用。该skill能力来自RedFoxHub,官网:https://redfox.hk/skills。
智能 PPT 生成助手。根据用户描述的主题、行业、风格,自动生成漂亮的 PPT 文件。支持所有行业(商务、教育、科技、医疗、金融、创意等),支持中英文双语,支持用户提供的模板或 AI 自动配色。触发词:做PPT、生成PPT、制作幻灯片、make ppt、create presentation、帮我做个PPT。
操作金山文档(WPS 云文档 / Kdocs / 365.kdocs.cn / www.kdocs.cn)云文档的官方 Skill。核心能力覆盖云端新建、读取、编辑、搜索、分享、整理在线文档(智能文档、Word、Excel、PDF、PPT、演示文稿、智能表格、多维表格)及个人知识库。当用户的任务涉及云文档操作时使用,包括但不限于:写周报/日报/工作汇报、处理合同/发票、创建报名表/登记表、网页剪藏、接龙转表格、信息收集、文档总结与内容生成、改写仿写、翻译、AI PPT生成、PDF拆分导出、标签分类归档、收藏管理、碎片笔记整理、表格美化、回收站还原、知识库管理。
用自然语言指令改 PDF 指定页的小工具。
数据月份:2026-09 · 下载/星标/安装数聚合自公开技能注册库(ClawHub、SkillHub),按月更新。口径说明见数据方法。