FREE EMAIL from @claw.boston 一键获取免费原生OpenClaw邮箱
Give your OpenClaw a real email address at @claw.boston. Send and receive emails with attachments, search your inbox, get notified of new messages. Setup tak...
Like a lobster shell, security has layers — review code before you run it.
License
SKILL.md
Setup
On first use, I'll register a @claw.boston email for you. Just say: "Set up my email" or "I need an email address"
Your API key will be stored locally at: ~/.openclaw/skills/claw-boston-email/config.json
Available Commands
Send email
"Send an email to alice@example.com about tomorrow's meeting" "Email bob@company.com: the report is ready"
Send with attachment
"Send the report.pdf to alice@example.com" "Email the summary to bob with the attached file"
Check inbox
"Do I have new emails?" "Check my inbox"
Read email
"Read the latest email" "What did alice@example.com send me?"
Reply
"Reply to that email saying I agree"
Search emails
"Search my inbox for emails about the project" "Find emails from alice@example.com" "Search for 'invoice' in my emails"
View account
"What's my email plan?" "How many emails have I sent today?"
API Reference
Base URL: https://api.claw.boston
Register
POST /api/register Body: { "instance_token": "<auto>", "preferred_name": "<optional>" } Response: { "address": "xxx@claw.boston", "api_key": "ck_...", "plan": "free", "limits": { "daily_send": 15, "history_days": 7 } }
Send
POST /api/send Header: Authorization: Bearer <api_key> Body: { "to": "...", "subject": "...", "text": "...", "attachments": [{ "filename": "...", "content": "<base64>", "content_type": "..." }] } Response: { "id": "msg_xxx", "status": "sent", "to": "...", "subject": "..." }
Inbox
GET /api/inbox Header: Authorization: Bearer <api_key> Query: ?limit=20&offset=0&since=<unix_timestamp> Response: { "emails": [...], "total": N, "limit": 20, "offset": 0 }
Read single email
GET /api/inbox/<id> Header: Authorization: Bearer <api_key> Response: { "id": "...", "from": "...", "to": "...", "subject": "...", "text": "...", "created_at": N, "has_attachments": bool, "attachments": [...] }
Download attachment
GET /api/inbox/<email_id>/attachments/<att_id> Header: Authorization: Bearer <api_key> Response: Binary file content with Content-Disposition header
Search
GET /api/inbox/search Header: Authorization: Bearer <api_key> Query: ?q=<keyword>&field=all|from|subject|body&limit=20&offset=0 Response: { "query": "...", "emails": [...], "total": N, "limit": 20, "offset": 0 }
Account info
GET /api/account Header: Authorization: Bearer <api_key> Response: { "plan": "...", "address": "...", "limits": {...}, "usage": {...} }
Configure webhook
POST /api/webhook/config Header: Authorization: Bearer <api_key> Body: { "url": "http://localhost:18789/webhook/claw-email" }
Webhook
I'll configure a webhook to receive real-time notifications when new emails arrive. The webhook points to your local OpenClaw gateway.
Webhook payload format: { "event": "email.received", "timestamp": "ISO8601", "data": { "id": "msg_xxx", "from": "sender@example.com", "to": "you@claw.boston", "subject": "Subject line", "preview": "First 200 chars...", "is_suspicious": false, "has_attachments": false, "attachment_count": 0 } }
Behavior Guide
First-time setup flow:
- Check if ~/.openclaw/skills/claw-boston-email/config.json exists
- If not → ask user for preferred email name (or offer to auto-generate)
- Read OpenClaw instance info, generate instance_token = HMAC-SHA256(instance_id + install_time + hostname)
- Call POST /api/register with instance_token and preferred_name
- Save the returned api_key to config.json
- Call POST /api/webhook/config to set up real-time notifications
- Confirm to user: "Your email is xxx@claw.boston"
Sending email:
- Read api_key from config.json
- Compose email based on user's natural language instruction:
- Infer appropriate subject line
- Write professional but concise email body
- Match the language the user used (English/Chinese/etc)
- If user mentions files to attach, encode them as base64 and include in attachments[]
- Call POST /api/send
- Confirm: "Email sent to xxx. Subject: ..."
Checking inbox:
- Call GET /api/inbox
- Summarize: "You have N new emails:" then list from/subject/preview for each
- If no emails: "Your inbox is empty"
Reading a specific email:
- Call GET /api/inbox/<id>
- Present the full email content naturally
- If has_attachments is true, list the attachments with filenames and sizes
Searching emails:
- Call GET /api/inbox/search?q=<keyword>
- Present results: "Found N emails matching '<query>':" then list from/subject/date
- If no results: "No emails found matching '<query>'"
- Offer: "Want me to read any of these?"
Replying:
- Use the from address of the original email as the new "to"
- Prepend "Re: " to original subject (if not already there)
- Compose reply based on user's instruction
- Call POST /api/send
Webhook notification (incoming email):
- Parse the webhook payload
- Notify user: "New email from {from} — Subject: {subject}"
- Show preview
- If has_attachments, mention: "This email has {attachment_count} attachment(s)"
- Ask: "Want me to read the full email?"
Checking account:
- Call GET /api/account
- Report: plan, daily usage, limits
Notes
- Free plan: 15 emails/day, 7-day history, 1MB attachments, basic search
- Pro plan ($5/mo): 500 emails/day, 90-day history, 10MB attachments, full search
- Foundation plan ($29 one-time): same as Pro, forever, with member badge
- Emails flagged as suspicious (potential prompt injection) will be noted
- Upgrade at https://claw.boston
- Discord: https://discord.gg/WuPp45xumx
Files
3 totalComments
Loading comments…
