如何通过exchangelib GetUserAvailability查询Exchange联系人忙闲时间
问题解答
完全可以,exchangelib封装的GetUserAvailability服务和Outlook客户端查看日历参会人忙/闲状态调用的是Exchange同一套底层EWS接口,返回的忙闲时段、状态标记等内容和Outlook端添加联系人到日历邀请时看到的空闲/忙碌展示效果完全一致。
实现注意事项
- 权限要求:调用接口使用的Exchange账号,默认拥有组织内联系人的忙闲信息查看权限,和Outlook端无需额外配置就能看他人忙闲的权限逻辑一致;如果目标联系人手动修改了日历权限关闭了忙闲对外展示,接口也会和Outlook一样无法拉取到对应数据。
- 查询能力对齐:默认调用时仅返回时段对应的状态(空闲/暂定/忙碌/外出/离线),不会返回会议主题、参会人等隐私内容;如果目标联系人对你开放了日历详情权限,调整接口参数即可拉取到完整的日程详情,和Outlook端看到的效果完全匹配。
- 时间粒度支持:支持自定义查询的起止时间窗口,默认时间粒度和Outlook一致为15分钟,可根据业务需求调整查询粒度,也支持跨时区的时间自动转换。
最简参考代码
from exchangelib import Credentials, Account, DELEGATE from exchangelib.properties import Attendee, TimeWindow import datetime # 初始化Exchange账号连接 creds = Credentials("你的企业邮箱地址", "你的账号密码") acc = Account("你的企业邮箱地址", credentials=creds, autodiscover=True, access_type=DELEGATE) # 配置查询时间范围:示例为查询当前时间起未来3天的日程 query_start = datetime.datetime.now() query_end = query_start + datetime.timedelta(days=3) time_window = TimeWindow(start=query_start, end=query_end) # 指定要查询忙闲状态的目标联系人 target = Attendee(mailbox="目标联系人的邮箱地址") # 调用忙闲查询接口 result = acc.protocol.get_user_availability( attendees=[target], time_window=time_window, requested_data="FreeBusy" # 若需查看详情可替换为"FreeBusyWithDetails" ) # 解析返回的忙闲时段数据 for event in result.attendees[0].calendar_events: print(f"时段: {event.start_time} ~ {event.end_time}, 状态: {event.busy_status}")
提示:如果批量查询多个联系人的忙闲状态,可以把多个目标联系人统一放到
attendees参数列表里,一次接口调用就能拿到所有目标的忙闲数据,和Outlook添加多个参会人时批量拉取忙闲的逻辑一致,效率更高。
内容的提问来源于stack exchange,提问作者Jon Champlin
相关产品推荐
相关产品推荐

