我目前正在使用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'>
&#39;日历&#39;选项不能迭代,但&#39;文件夹&#39;选项可以。
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 - Access All Shared Calendars
它们似乎有某种搜索过滤器,但我无法在exchangelib
库中找到它。
然后我找到另一个帖子:
这个讲述了其他日历如何成为Calendars对象下的文件夹。但是,当我查询account.calendar.get_folders()
时,我会回来0结果。
答案 0 :(得分:1)
No useable default Calendar folders
错误表示Exchangelib无法在帐户的文件夹中找到默认日历文件夹。可能有很多原因。您仍然可以在Account.folders
中找到日历文件夹。
答案 1 :(得分: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)
答案 2 :(得分:0)
只是为了添加一些上下文,以防这对其他人有帮助,我们在用户 A 可以访问用户 B 的收件箱但无权访问用户 B 的日历的情况下遇到了这种情况。如果将用户 A 添加到用户 B 的日历共享中,则问题解决。