Connect to Exchange 2010 to manage emails, calendar events, contacts, tasks, attachments, shared calendars, recurring events, and out-of-office settings.
数据来源:ClawHub。 在 ClawSkills 查看
选择你使用的 Agent
方法一:命令行安装(推荐)
推荐(无需提前安装 clawhub)
npx clawhub@latest --dir ~/.claude/skills install exchange2010或使用 clawhub CLI(需提前安装)
clawhub --dir ~/.claude/skills install exchange2010⚠️ 需要 Node.js 18+,没有 Node?请使用下方方法二直接下载 ZIP。 安装 Node.js →
方法二:手动下载安装(无需 Node)
下载 ZIP,解压后将文件夹放到以下路径,重启 Agent 即可:
安装路径
~/.claude/skills/exchange2010/💡解压后将文件夹放到上方路径,重启 Agent 即可生效
Exchange 2010 EWS integration for emails, calendar, contacts, and tasks.
Requires credentials in .env.credentials:
EXCHANGE_SERVER=mail.company.com
EXCHANGE_DOMAIN=company
[email protected]
EXCHANGE_PASSWORD=your_password
subject__contains, start__gte, etc.from skills.exchange2010 import get_account, get_unread_emails
account = get_account()
emails = get_unread_emails(account, limit=10)
for email in emails:
print(f"{email['subject']} from {email['sender']}")
from skills.exchange2010 import get_today_events
# Your own events
today = get_today_events()
# Events from shared calendar
today = get_today_events('[email protected]')
from skills.exchange2010 import search_calendar_by_subject
from datetime import date
# Fast search for Ekadashi
ekadashi = search_calendar_by_subject(
email_address='[email protected]',
search_term='Ekadashi',
start_date=date(2025, 1, 1),
end_date=date(2026, 12, 31)
)
print(f"Found: {len(ekadashi)} events")
from skills.exchange2010 import create_calendar_event
from datetime import datetime
create_calendar_event(
subject="Team Meeting",
start=datetime(2026, 2, 7, 14, 0),
end=datetime(2026, 2, 7, 15, 0),
body="Project discussion",
location="Conference Room A"
)
from skills.exchange2010 import update_calendar_event
from datetime import datetime
# Reschedule
update_calendar_event(
event_id='AAQkAG...',
start=datetime(2026, 2, 10, 14, 0),
end=datetime(2026, 2, 10, 15, 0),
location="New Room B"
)
from skills.exchange2010 import get_folder_emails, list_email_folders
# List all folders
folders = list_email_folders(account)
for f in folders:
print(f"{f['name']}: {f['unread_count']} unread")
# Sent Items
sent = get_folder_emails('sent', limit=10)
# Drafts
drafts = get_folder_emails('drafts')
# Trash
trash = get_folder_emails('trash')
from skills.exchange2010 import search_emails
# By sender
emails = search_emails(sender='[email protected]', limit=10)
# By subject
emails = search_emails(subject='Invoice', folder='inbox')
# Unread only
emails = search_emails(is_unread=True, limit=20)
from skills.exchange2010 import mark_email_as_read
mark_email_as_read(email_id='AAQkAG...')
from skills.exchange2010 import get_email_attachments
# Show info
attachments = get_email_attachments(email_id='AAQkAG...')
for att in attachments:
print(f"{att['name']}: {att['size']} bytes")
# Download
attachments = get_email_attachments(
email_id='AAQkAG...',
download_path='/tmp/email_attachments'
)
Prerequisite: pip install PyPDF2 for PDF text extraction
from skills.exchange2010 import process_attachment_content
results = process_attachment_content(email_id='AAQkAG...')
for result in results:
print(f"File: {result['name']}")
if 'extracted_text' in result:
print(f"Content: {result['extracted_text'][:500]}...")
from skills.exchange2010 import search_contacts, resolve_name
# Search contacts
contacts = search_contacts('John Doe')
for c in contacts:
print(f"{c['name']}: {c['email']}")
# Resolve name (GAL)
result = resolve_name('[email protected]')
if result:
print(f"Found: {result['name']} - {result['email']}")
from skills.exchange2010 import get_tasks, create_task, complete_task, delete_task
from datetime import datetime, timedelta
# Show open tasks
tasks = get_tasks()
for task in tasks:
status = '✅' if task['is_complete'] else '⏳'
print(f"{status} {task['subject']}")
# Create new task
task_id = create_task(
subject="Finish report",
body="Q1 report due Friday",
due_date=datetime.now() + timedelta(days=3),
importance="High"
)
# Mark as complete
complete_task(task_id)
# Delete
delete_task(task_id)
from skills.exchange2010 import get_recurring_events
recurring = get_recurring_events(
email_address='[email protected]',
days=30
)
for r in recurring:
print(f"{r['subject']}: {r['recurrence']}")
from skills.exchange2010 import get_out_of_office, set_out_of_office
from datetime import datetime, timedelta
# Check status
oof = get_out_of_office()
print(f"Out of office active: {oof['enabled']}")
# Enable
set_out_of_office(
enabled=True,
internal_reply="I am on vacation until Feb 15th.",
external_reply="I am on vacation until Feb 15th.",
start=datetime.now(),
end=datetime.now() + timedelta(days=7),
external_audience='All' # 'All', 'Known', 'None'
)
# Disable
set_out_of_office(enabled=False, internal_reply="")
from skills.exchange2010 import send_email
send_email(
to=["[email protected]"],
subject="Test",
body="Hello!",
cc=["[email protected]"]
)
| Function | Description | |----------|-------------| | get_account() | Connect to Exchange | | get_unread_emails(account, limit=50) | Get unread emails | | search_emails(search_term, sender, subject, is_unread, folder, limit) | Search emails | | send_email(to, subject, body, cc, bcc) | Send email | | mark_email_as_read(email_id) | Mark as read | | get_email_attachments(email_id, download_path) | Download attachments | | process_attachment_content(email_id, attachment_name) | Extract text |
| Function | Description | |----------|-------------| | get_folder_emails(folder_name, limit, is_unread) | Emails from folder | | list_email_folders(account) | List all folders |
| Function | Description | |----------|-------------| | get_today_events(email_address) | Today's events | | get_upcoming_events(email_address, days) | Next N days | | get_calendar_events(account, start, end) | Events in range | | get_shared_calendar_events(email, start, end) | Shared calendar | | search_calendar_by_subject(email, term, start, end) | Fast search | | create_calendar_event(subject, start, end, body, location) | Create event | | update_calendar_event(event_id, ...) | Update event | | get_event_details(event_id) | Show details | | delete_calendar_event(event_id) | Delete event | | get_recurring_events(email, start, end) | Recurring events | | list_available_calendars(account) | List calendars | | count_ekadashi_events(email, start_year) | Count Ekadashi |
| Function | Description | |----------|-------------| | search_contacts(search_term, limit) | Search contacts | | resolve_name(name) | Resolve name (GAL) |
| Function | Description | |----------|-------------| | get_tasks(status, folder) | Get tasks | | create_task(subject, body, due_date, importance, categories) | Create task | | complete_task(task_id) | Mark complete | | delete_task(task_id) | Delete task |
...
安装 Exchange2010 后,可以对 AI 说这些话来触发它
Send a Slack message to the #engineering channel about the deployment
Formats and sends the message with relevant context, tagging the right people
Summarize all unread messages in my inbox from today
Reads messages across connected channels and returns a prioritized summary
Draft a reply to this customer complaint and send it for review
Writes an empathetic, professional response and routes it to the approval queue
将技能文件夹放到 ~/.claude/skills/exchange2010/ 目录(个人级,所有项目可用),或 .claude/skills/exchange2010/(项目级)。重启 AI 客户端后,用 /exchange2010 主动调用,或让 AI 根据上下文自动发现并使用。
Exchange2010 支持 Claude、Cursor、OpenClaw,可与这些 AI 平台无缝集成,扩展其能力。
Exchange2010 可免费安装使用。请查阅仓库了解许可证信息。
Connect to Exchange 2010 to manage emails, calendar events, contacts, tasks, attachments, shared calendars, recurring events, and out-of-office settings.
Exchange2010 属于「Communication」分类,该分类的技能帮助 AI 智能体在此领域执行专业任务。