1

我目前正在使用 exchangelib 连接到 Office365 EWS。我目前的情况是我想访问我们会议室的日历。当我在 Outlook 中单击“添加房间”选项时,他们的日历就会显示出来。当我将它们添加到我的日历视图的“其他日历”部分时,它们也会出现。

当我尝试使用会议室的电子邮件地址作为帐户,然后检查日历时,我收到以下错误:

exchangelib.errors.ErrorFolderNotFound: No useable default Calendar folders

所以我想我应该只是通过我的登录名来访问日历;好像我正在查看 Outlook 中的“其他日历”部分。问题是我似乎无法弄清楚如何访问这些日历。我可以毫无问题地访问我自己的。

当我查看 EWS 的 C# 实现时,有一种搜索文件夹的方法,您可以在其中找到其他日历。我在 exchangelib 中没有看到类似的东西。

举个例子:

credentials = Credentials(username='My email address', password='My password')
config = Configuration(credentials=credentials, server='outlook.office365.com', has_ssl=True)
email = # My e-mail address (I also attempted with the room's e-mail address)

account = Account(primary_smtp_address=email, credentials=credentials,
                  autodiscover=False, config=config)

for f in account.folders:
    print f

结果:

<class 'exchangelib.folders.Calendar'>
<class 'exchangelib.folders.Contacts'>
<class 'exchangelib.folders.Tasks'>
<class 'exchangelib.folders.Messages'>
<class 'exchangelib.folders.Folder'>

“日历”选项不能迭代,但“文件夹”选项可以。

for f in account.folders[Folder]:
    print f

结果:

Folder (Conversation Action Settings)
Folder (Conversation History)
Folder (Files)
Folder (Journal)
Folder (Notes)
Folder (Quick Step Settings)
Folder (RSS Feeds)
Folder (Social Activity Notifications)
Folder (Yammer Root)

这些选项似乎都没有给我我正在寻找的东西。

任何帮助将不胜感激!

先感谢您

编辑

我发现了account.root.get_folders(). 我现在可以看到一个非常大的文件夹列表。但是,我仍然看不到一个似乎可用于其他日历的日历。

我一直在阅读其他人在 C# 中使用的解决方案并遇到了这个线程:

EWS - 访问所有共享日历

他们似乎有某种搜索过滤器,但我无法在exchangelib库中找到它。

然后我发现了另一个线程:

https://social.msdn.microsoft.com/Forums/en-US/2bfe798e-501f-421e-9a9a-76ae7eaf57c8/other-calendars-in-ews?forum=exchangesvrdevelopment

这一篇谈到了其他日历如何成为日历对象下的文件夹。但是,当我查询时account.calendar.get_folders()返回 0 个结果。

4

3 回答 3

1

No useable default Calendar folders错误意味着 exchangelib 在该帐户的文件夹中找不到默认日历文件夹。这可能有很多原因。您可能仍然可以在 中找到日历文件夹Account.folders

于 2017-07-10T21:26:06.167 回答
0

您可以通过查询 account.calendar.children 获取其他日历表:

for cal_folder in account.calendar.children:
    if -1 !=str(cal_folder).find('my_Calendar'):
        myCalendar=cal_folder
        break

for item in myCalendar.all():
    print(item.subject)
于 2020-05-16T09:35:25.833 回答
0

只是为了添加一些上下文以防这对其他人有所帮助,我们在用户 A 可以访问用户 B 的收件箱但无权访问用户 B 的日历的情况下遇到了这种情况。如果将用户 A 添加到用户 B 的日历共享中,问题就解决了。

于 2021-03-02T21:01:12.243 回答