【问题标题】:What is the recommended way to access shared *personal* calendars in EWS?在 EWS 中访问共享*个人*日历的推荐方法是什么?
【发布时间】:2021-09-21 00:03:56
【问题描述】:

我正在使用带有服务帐户凭据的 Exchangelib 来模拟单个 EWS 用户。我可以检索用户有权访问的日历列表,但此列表不包括与用户共享的个人日历。

示例:Jane 有一个名为“Calendar”的默认日历,他们与 Bill 共享此日历。 Jane 还有一个他们创建并与 Bill 共享的名为“Interviews”的日历。

当我列出比尔的日历时,我只能看到“采访”日历 - 简的默认日历没有列出。

我正在迭代 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 和电子邮件地址的情况下列出所有这些前进。

这些个人日历以“代表”级别的访问权限共享,但我也尝试以“可以编辑”的访问权限共享。

【问题讨论】:

    标签: exchangewebservices exchangelib


    【解决方案1】:

    我能够使用基于 Stackoverflow 答案的代码以稍微不同的方式解决问题。

    首先我使用IMPERSONATION 实例化基本帐户,然后我使用GetFolder 使用原始帐户的account 上下文,并将mailbox 设置为其他用户的电子邮件地址。

    为此,您必须知道共享日历所有者的电子邮件地址,这并不理想。在 cmets 中,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="test@example.com",
        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="other_user@example.com"
                    ),
                )
            ],
            additional_fields={
                FieldPath(field=field)
                for field in account.calendar.supported_fields(
                    version=account.version
                )
            },
            shape=ID_ONLY,
        )
    )
    

    【讨论】:

      猜你喜欢
      • 2011-05-12
      • 1970-01-01
      • 2014-07-09
      • 2017-02-16
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2019-02-28
      相关资源
      最近更新 更多