可完全访问 Exchange 2010 EWS,管理邮件、文件夹、附件、日历事件、联系人、任务及外出设置。
exchange 2010. 2010 EWS集成,用于电子邮件、日历、联系人和任务.是一项面向实际任务的技能,主要用于Setup. 要求以.env.creditises 的证书 :.;FeaturesQQ 电子邮件:读取未读,发送,搜索,标记为读QQ。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;
涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
Exchange 2010 EWS 集成,支持邮件、日历、联系人和任务管理。
需在 .env.credentials 文件中提供凭据:
EXCHANGE_SERVER=mail.company.com
EXCHANGE_DOMAIN=company
EXCHANGE_EMAIL=user@company.com
EXCHANGE_PASSWORD=your_password
subject__contains、start__gte 等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
# 当前用户的日程
today = get_today_events()
# 共享日历中的日程
today = get_today_events('shared@company.com')
from skills.exchange2010 import search_calendar_by_subject
from datetime import date
# 快速搜索 Ekadashi 相关日程
ekadashi = search_calendar_by_subject(
email_address='shared@company.com',
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
# 重新安排时间
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
# 列出所有文件夹
folders = list_email_folders(account)
for f in folders:
print(f"{f['name']}: {f['unread_count']} unread")
# 已发送邮件
sent = get_folder_emails('sent', limit=10)
# 草稿
drafts = get_folder_emails('drafts')
# 垃圾邮件/已删除邮件
trash = get_folder_emails('trash')
from skills.exchange2010 import search_emails
# 按发件人搜索
emails = search_emails(sender='boss@company.com', limit=10)
# 按主题搜索
emails = search_emails(subject='Invoice', folder='inbox')
# 仅搜索未读邮件
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
# 显示附件信息
attachments = get_email_attachments(email_id='AAQkAG...')
for att in attachments:
print(f"{att['name']}: {att['size']} bytes")
# 下载附件到指定路径
attachments = get_email_attachments(
email_id='AAQkAG...',
download_path='/tmp/email_attachments'
)
前提条件:需安装 pip install PyPDF2 以支持 PDF 文本提取
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
# 搜索联系人
contacts = search_contacts('John Doe')
for c in contacts:
print(f"{c['name']}: {c['email']}")
# 解析姓名(GAL)
result = resolve_name('john.doe@company.com')
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
# 查看待处理任务
tasks = get_tasks()
for task in tasks:
status = '✅' if task['is_complete'] else '⏳'
print(f"{status} {task['subject']}")
# 创建新任务
task_id = create_task(
subject="Finish report",
body="Q1 report due Friday",
due_date=datetime.now() + timedelta(days=3),
importance="High"
)
# 标记为已完成
complete_task(task_id)
# 删除任务
delete_task(task_id)
from skills.exchange2010 import get_recurring_events
recurring = get_recurring_events(
email_address='shared@company.com',
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
# 检查当前状态
oof = get_out_of_office()
print(f"Out of office active: {oof['enabled']}")
# 启用外出办公
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'
)
# 禁用外出办公
set_out_of_office(enabled=False, internal_reply="")
from skills.exchange2010 import send_email
send_email(
to=["recipient@example.com"],
subject="Test",
body="Hello!",
cc=["cc@example.com"]
)
| 函数 | 说明 |
|---|---|
get_account() |
连接 Exchange 服务器 |
get_unread_emails(account, limit=50) |
获取未读邮件 |
search_emails(search_term, sender, subject, is_unread, folder, limit) |
搜索邮件 |
send_email(to, subject, body, cc, bcc) |
发送邮件 |
mark_email_as_read(email_id) |
标记邮件为已读 |
get_email_attachments(email_id, download_path) |
下载附件 |
process_attachment_content(email_id, attachment_name) |
提取附件文本内容 |
| 函数 | 说明 |
|---|---|
get_folder_emails(folder_name, limit, is_unread) |
获取指定文件夹中的邮件 |
list_email_folders(account) |
列出所有邮件文件夹 |
| 函数 | 说明 |
|---|---|
get_today_events(email_address) |
获取今日日程 |
get_upcoming_events(email_address, days) |
获取未来 N 天的日程 |
get_calendar_events(account, start, end) |
获取指定时间段内的日程 |
get_shared_calendar_events(email, start, end) |
获取共享日历中的日程 |
search_calendar_by_subject(email, term, start, end) |
按主题快速搜索日程 |
create_calendar_event(subject, start, end, body, location) |
创建日程 |
update_calendar_event(event_id, ...) |
更新日程 |
get_event_details(event_id) |
获取日程详情 |
delete_calendar_event(event_id) |
删除日程 |
get_recurring_events(email, start, end) |
获取重复事件 |
list_available_calendars(account) |
列出可用日历 |
count_ekadashi_events(email, start_year) |
统计 Ekadashi 事件数量 |
| 函数 | 说明 |
|---|---|
search_contacts(search_term, limit) |
搜索联系人 |
resolve_name(name) |
解析姓名(GAL) |
| 函数 | 说明 |
|---|---|
get_tasks(status, folder) |
获取任务列表 |
create_task(subject, body, due_date, importance, categories) |
创建任务 |
complete_task(task_id) |
标记任务为已完成 |
delete_task(task_id) |
删除任务 |
| 函数 | 说明 |
|---|---|
get_out_of_office(email_address) |
读取外出办公状态 |
set_out_of_office(enabled, internal_reply, ...) |
设置外出办公状态 |
subject__contains、start__gte)比遍历方式性能更优