#python #exchangelib
#python #exchangelib
Вопрос:
Я пытаюсь получить доступ к календарю других пользователей через:
account = Account(
primary_smtp_address=user,
autodiscover=False,
config=config,
access_type=DELEGATE
)
items = account.calendar.filter(start__range=(start_date, end_date))
Однако я получаю Access is denied. Check credentials and try again., Cannot query rows in a table.
доступ к их календарям через пользовательский интерфейс, поэтому я не уверен, что проблема именно в разрешениях (их календарь общедоступен в организации), и я также уже могу запрашивать свой собственный календарь просто отлично, просто когда дело доходит до других пользователей, я сталкиваюсь с этим. Есть идеи?
Редактировать 1: это сбой XML-вызова:
Response data: <?xml version='1.0' encoding='utf-8'?>
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" MajorVersion="15" MinorVersion="20" MajorBuildNumber="3305" MinorBuildNumber="32" Version="V2018_01_08"/>
</s:Header>
<s:Body>
<m:FindItemResponse
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseMessages>
<m:FindItemResponseMessage ResponseClass="Error">
<m:MessageText>Access is denied. Check credentials and try again., Cannot query rows in a table.</m:MessageText>
<m:ResponseCode>ErrorAccessDenied</m:ResponseCode>
<m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
</m:FindItemResponseMessage>
</m:ResponseMessages>
</m:FindItemResponse>
</s:Body>
</s:Envelope>
Кроме того, не уверен, насколько полезно, но account.calendar.filter(start__range=(start_date, end_date))
возвращает просто
QuerySet(q=start >= EWSDateTime(2020, 8, 26, 12, 18, 40, 194001, tzinfo=<DstTzInfo 'Europe/London' BST 1:00:00 DST>) AND start <= EWSDateTime(2020, 8, 28, 0, 0, tzinfo=<DstTzInfo 'Europe/London' BST 1:00:00 DST>), folders=[Calendar (Calendar)])
Запрос XML:
<?xml version='1.0' encoding='utf-8'?>
<s:Envelope
xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<s:Header>
<t:RequestServerVersion Version="Exchange2016"/>
<t:TimeZoneContext>
<t:TimeZoneDefinition Id="GMT Standard Time"/>
</t:TimeZoneContext>
</s:Header>
<s:Body>
<m:FindItem Traversal="Shallow">
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
</m:ItemShape>
<m:IndexedPageItemView MaxEntriesReturned="100" Offset="0" BasePoint="Beginning"/>
<m:Restriction>
<t:And>
<t:IsGreaterThanOrEqualTo>
<t:FieldURI FieldURI="calendar:Start"/>
<t:FieldURIOrConstant>
<t:Constant Value="2020-08-27T09:22:23 01:00"/>
</t:FieldURIOrConstant>
</t:IsGreaterThanOrEqualTo>
<t:IsLessThanOrEqualTo>
<t:FieldURI FieldURI="calendar:Start"/>
<t:FieldURIOrConstant>
<t:Constant Value="2020-08-28T00:00:00 01:00"/>
</t:FieldURIOrConstant>
</t:IsLessThanOrEqualTo>
</t:And>
</m:Restriction>
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="calendar">
<t:Mailbox>
<t:EmailAddress>censored@company.com</t:EmailAddress>
<t:RoutingType>SMTP</t:RoutingType>
<t:MailboxType>Mailbox</t:MailboxType>
</t:Mailbox>
</t:DistinguishedFolderId>
</m:ParentFolderIds>
</m:FindItem>
</s:Body>
</s:Envelope>
Комментарии:
1. Попробуйте включить ведение журнала отладки, чтобы увидеть, какой XML-запрос вызывает эту ошибку на сервере. Поиск в Google сообщения об ошибке не дает много подсказок, кроме ошибок разрешения и возможной ошибки в Exchange 2016: support.microsoft.com/en-ca/help/3196521 /…
2. Вы могли бы попробовать ограничить поля, которые вы извлекаете, добавив, например,
.only('start', 'end', 'subject')
в запрос. Возможно, что календарь содержит личные встречи с полями, к которым у вас нет доступа.3. Я прикрепил XML неудачного вызова к основному вопросу. Я пытался фильтровать через начало и конец безрезультатно (зная, что у меня есть доступ к просмотру этих событий).
API version "Exchange2016" worked but server reports version "V2018_01_08". Using "Exchange2016"
Имеет какое-либо значение?4. Обновленный основной вопрос с дополнительной информацией.
5. Вы опубликовали XML-ответ, но вам все еще не хватает XML-запроса. Вы можете опубликовать это? Версия API не причиняет вреда.