據 AlphaMoat 統計,截至 2026-09,Email Writer 累計下載 1,480 次、獲 1 個星標,在全部 5,078 個 AI 技能中排名第 4,782 位,在「辦公效率」分類(435 個)中排名第 392 位。
| 平台 | 累計安裝 | 累計下載 | 星標 | 評論 |
|---|---|---|---|---|
| ClawHub ↗ | 3 | 437 | - | - |
| SkillHub ↗ | 119 | 1480 | 1 | — |
各平台的計數口徑不同,統計時間不一致。
支援 Gmail、Outlook、QQ 電子郵件和 163 電子郵件。僅在使用者明確要求向特定收件人寫信並傳送時觸發;瀏覽器操作前核對收件人、主題、要點、語氣和電子郵件登入狀態。郵件內文與附件會經瀏覽器傳送到所選服務商。支援中英文郵件;驗證碼、加密郵件和批次傳送不在文件支援範圍內。
資料釋出於 2026-10-26
以下是根據技能文件生成的示例,不代表實際執行結果。
依據技能文件中的宣告整理,未經實際安裝或執行驗證。
2026-09 起統計方法調整:同名技能按作者分別統計,並覆蓋全部技能。圖中虛線為調整前的月份,與之後的資料不直接比較,也不計算跨越調整的增長。 該技能有同名的其他版本,調整前的資料歸屬當前下載量最大的這一個。
| 月份 | 累計下載 | 環比 | 星標 |
|---|---|---|---|
| 2026-09 | 1480 | — | 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),按月更新。口徑說明見資料方法。