本文介绍了在EWS中访问共享*个人*日历的推荐方式是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用具有服务帐户凭据的Exchangelib来模拟单个EWS用户。我能够检索用户有权访问的日历列表,但此列表不包括与用户共享的个人日历。示例:Jane有一个名为Calendar";的默认日历,他们与Bill共享此日历。简还有他们创建的第二个日历,并与比尔共享了名为&Quot;Interview&Quot;的日历。当我列出Bill的日历时,我只能看到访问日历-未列出Jane的默认日历。
我正在迭代Account()
对象的calendar.children
:
>>> ews_account = Account(
primary_smtp_address=XXXXX,
config=XXXXX,
autodiscover=False,
access_type=IMPERSONATION,
)
>>> for calendar in ews_account.calendar.children:
>>> print(calendar.name)
"Interviews"
有没有其他方法可以发现Jane与Bill共享了她的个人日历?
看起来需要a method将日历ID与Jane的电子邮件地址一起发送,以查看它是否与Bill共享,但我希望有一种方法可以列出所有这些内容,而无需事先知道日历ID和电子邮件地址。
这些个人日历是与&Quot;委派&级访问权限共享的,但我也尝试了与&Quot;可以编辑&q;访问权限共享。
推荐答案
我能够使用此基于堆栈溢出答案的代码以略有不同的方式解决问题。
首先我使用IMPERSONATION
实例化基本帐户,然后使用GetFolder
使用原始帐户的account
上下文,并将mailbox
设置为其他用户的电子邮件地址。
要实现此操作,您必须知道共享日历所有者的电子邮件地址,这并不理想。Glen Scales在评论中表示,你可以使用NavLinks
直接在原始账户上查找这些共享日历,但我无法理解:EWS - Access All Shared Calendars
from exchangelib import (
IMPERSONATION,
Account,
Configuration,
Mailbox,
folders
)
from exchangelib.fields import FieldPath
from exchangelib.items import ID_ONLY
from exchangelib.services import GetFolder
account = Account(
primary_smtp_address="[email protected]",
config=Configuration(
server=...,
credentials=...,
),
autodiscover=True,
access_type=IMPERSONATION,
)
shared_calendar = next(
GetFolder(account=account).call(
folders=[
folders.DistinguishedFolderId(
id=folders.Calendar.DISTINGUISHED_FOLDER_ID,
mailbox=Mailbox(
email_address="[email protected]"
),
)
],
additional_fields={
FieldPath(field=field)
for field in account.calendar.supported_fields(
version=account.version
)
},
shape=ID_ONLY,
)
)
这篇关于在EWS中访问共享*个人*日历的推荐方式是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!