Добавление и удаление делегатов с помощью EWS в Exchange
Узнайте, как добавлять делегатов в почтовые ящики пользователей или удалять их из них с помощью управляемого API EWS или EWS в Exchange.
Управляемый API EWS или EWS можно использовать, чтобы разрешить делегатам действовать от имени владельца почтового ящика или удалять доступ делегата к почтовому ящику. Пользователи, добавленные в качестве делегата и имеющие разрешения, могут выполнять задачи от имени владельца почтового ящика. Например, они могут создавать и отправлять приглашения на собрания, отправлять сообщения электронной почты и отвечать на приглашения на собрания от имени владельца почтового ящика.
Таблица 1. Методы управляемого API EWS и операции EWS для добавления и удаления делегатов
Задача | Метод управляемого API EWS | Операция EWS |
---|---|---|
Добавление делегатов |
ExchangeService.AddDelegates |
AddDelegate |
Удаление делегатов |
ExchangeService.RemoveDelegates |
RemoveDelegate |
После того как делегат получает разрешения на доступ к папке, он может действовать с элементами в папке и любых вложенных папках в соответствии с разрешениями делегата. Разрешения для делегатов применяются только к вложенным папкам, созданным после предоставления доступа делегату. Сведения об обновлении разрешений для существующих папок или других папок см. в статье Установка разрешений для папок для другого пользователя с помощью EWS в Exchange.
Обратите внимание, что делегаты могут добавляться только в учетные записи с поддержкой почтовых ящиков, включая группы безопасности с поддержкой почты. По умолчанию один вызов доступа делегата EWS может получить доступ не более чем к 255 разным почтовым ящикам.
Добавление делегатов с помощью управляемого API EWS
Делегаты можно добавить в почтовый ящик с помощью метода AddDelegates EWS Managed API. В этом примере создается новый объект calendar, contact и email DelegateUser , и каждому делегату предоставляются разрешения редактора для соответствующей папки. Вы можете изменить пример, чтобы добавить делегат в любую из папок, указанных свойствами DelegatePermissions, и задать разрешения для любых значений, заданных перечислением DelegateFolderPermissionLevel .
В этом примере предполагается, что служба является допустимым объектом ExchangeService для владельца почтового ящика и что пользователь прошел проверку подлинности на сервере Exchange Server.
public static Collection<DelegateUserResponse> AddDelegates(ExchangeService service)
{
// Create a list to hold the new delegates to add.
List<DelegateUser> newDelegates = new System.Collections.Generic.List<DelegateUser>();
// Create a new delegate that has editor access to the mailbox owner's Calendar folder.
DelegateUser calendarDelegate = new DelegateUser("calendardelegate@contoso.com");
calendarDelegate.Permissions.CalendarFolderPermissionLevel = DelegateFolderPermissionLevel.Editor;
// Add the delegate to the list of new delegates.
newDelegates.Add(calendarDelegate);
// Create a new delegate that has editor access to the mailbox owner's Contacts folder.
DelegateUser contactDelegate = new DelegateUser("contactdelegate@contoso.com");
contactDelegate.Permissions.ContactsFolderPermissionLevel = DelegateFolderPermissionLevel.Editor;
// Add the delegate to the list of new delegates.
newDelegates.Add(contactDelegate);
// Create a new delegate that has editor access to the mailbox owner's Inbox folder.
DelegateUser emailDelegate = new DelegateUser("emaildelegate@contoso.com");
emailDelegate.Permissions.InboxFolderPermissionLevel = DelegateFolderPermissionLevel.Editor;
// Add the delegate to the list of new delegates.
newDelegates.Add(emailDelegate);
// Create a mailbox object that represents the mailbox owner.
Mailbox mailbox = new Mailbox("primary@contoso.com");
// Call the AddDelegates method to add the delegates to the target mailbox.
Collection<DelegateUserResponse> response = service.AddDelegates(mailbox, MeetingRequestsDeliveryScope.DelegatesAndSendInformationToMe, newDelegates);
foreach (DelegateUserResponse resp in response)
{
// Print out the result and the last eight characters of the item ID.
Console.WriteLine("For delegate " + resp.DelegateUser.UserId.PrimarySmtpAddress.ToString());
Console.WriteLine("Result: {0}", resp.Result);
Console.WriteLine("Error Code: {0}", resp.ErrorCode);
Console.WriteLine("ErrorMessage: {0}\r\n", resp.ErrorMessage);
Console.WriteLine("\r\n");
}
return response;
}
Добавление делегатов с помощью EWS
В следующем примере кода показано, как добавить отдельных делегатов календаря, контактов и электронной почты с помощью операции AddDelegate EWS. Изменяемый почтовый ящик задается элементом Mailbox , а параметры разрешений для каждого делегата содержатся в элементе DelegateUser . Каждому из делегатов предоставлены разрешения редактора для целевой папки.
Это также XML-запрос, который отправляет управляемый API EWS при использовании метода AddDelegates для добавления делегатов.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:AddDelegate>
<m:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</m:Mailbox>
<m:DelegateUsers>
<t:DelegateUser>
<t:UserId>
<t:PrimarySmtpAddress>calendardelegate@contoso.com</t:PrimarySmtpAddress>
</t:UserId>
<t:DelegatePermissions>
<t:CalendarFolderPermissionLevel>Editor</t:CalendarFolderPermissionLevel>
<t:TasksFolderPermissionLevel>None</t:TasksFolderPermissionLevel>
<t:InboxFolderPermissionLevel>None</t:InboxFolderPermissionLevel>
<t:ContactsFolderPermissionLevel>None</t:ContactsFolderPermissionLevel>
<t:NotesFolderPermissionLevel>None</t:NotesFolderPermissionLevel>
<t:JournalFolderPermissionLevel>None</t:JournalFolderPermissionLevel>
</t:DelegatePermissions>
<t:ReceiveCopiesOfMeetingMessages>false</t:ReceiveCopiesOfMeetingMessages>
<t:ViewPrivateItems>false</t:ViewPrivateItems>
</t:DelegateUser>
<t:DelegateUser>
<t:UserId>
<t:PrimarySmtpAddress>contactdelegate@contoso.com</t:PrimarySmtpAddress>
</t:UserId>
<t:DelegatePermissions>
<t:CalendarFolderPermissionLevel>None</t:CalendarFolderPermissionLevel>
<t:TasksFolderPermissionLevel>None</t:TasksFolderPermissionLevel>
<t:InboxFolderPermissionLevel>None</t:InboxFolderPermissionLevel>
<t:ContactsFolderPermissionLevel>Editor</t:ContactsFolderPermissionLevel>
<t:NotesFolderPermissionLevel>None</t:NotesFolderPermissionLevel>
<t:JournalFolderPermissionLevel>None</t:JournalFolderPermissionLevel>
</t:DelegatePermissions>
<t:ReceiveCopiesOfMeetingMessages>false</t:ReceiveCopiesOfMeetingMessages>
<t:ViewPrivateItems>false</t:ViewPrivateItems>
</t:DelegateUser>
<t:DelegateUser>
<t:UserId>
<t:PrimarySmtpAddress>emaildelegate@contoso.com</t:PrimarySmtpAddress>
</t:UserId>
<t:DelegatePermissions>
<t:CalendarFolderPermissionLevel>None</t:CalendarFolderPermissionLevel>
<t:TasksFolderPermissionLevel>None</t:TasksFolderPermissionLevel>
<t:InboxFolderPermissionLevel>Editor</t:InboxFolderPermissionLevel>
<t:ContactsFolderPermissionLevel>None</t:ContactsFolderPermissionLevel>
<t:NotesFolderPermissionLevel>None</t:NotesFolderPermissionLevel>
<t:JournalFolderPermissionLevel>None</t:JournalFolderPermissionLevel>
</t:DelegatePermissions>
<t:ReceiveCopiesOfMeetingMessages>false</t:ReceiveCopiesOfMeetingMessages>
<t:ViewPrivateItems>false</t:ViewPrivateItems>
</t:DelegateUser>
</m:DelegateUsers>
<m:DeliverMeetingRequests>DelegatesAndSendInformationToMe</m:DeliverMeetingRequests>
</m:AddDelegate>
</soap:Body>
</soap:Envelope>
Сервер отвечает на запрос AddDelegate сообщением AddDelegateResponse , которое содержит значение элемента ResponseCodeNoError, указывающее, что делегаты успешно созданы.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15"
MinorVersion="0"
MajorBuildNumber="888"
MinorBuildNumber="9"
Version="V2_10"
xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns="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" />
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<m:AddDelegateResponse ResponseClass="Success"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<m:ResponseCode>NoError</m:ResponseCode>
<m:ResponseMessages>
<m:DelegateUserResponseMessageType ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:DelegateUser>
<t:UserId>
<t:SID>S-1-5-21-1337771579-694202782-848329751-1535221</t:SID>
<t:PrimarySmtpAddress>calendardelegate@contoso.com</t:PrimarySmtpAddress>
<t:DisplayName>calendardelegate</t:DisplayName>
</t:UserId>
<t:ReceiveCopiesOfMeetingMessages>false</t:ReceiveCopiesOfMeetingMessages>
<t:ViewPrivateItems>false</t:ViewPrivateItems>
</m:DelegateUser>
</m:DelegateUserResponseMessageType>
<m:DelegateUserResponseMessageType ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:DelegateUser>
<t:UserId>
<t:SID>S-1-5-21-1337771579-694202782-848329751-1535264</t:SID>
<t:PrimarySmtpAddress>contactdelegate@contoso.com</t:PrimarySmtpAddress>
<t:DisplayName>contactdelegate</t:DisplayName>
</t:UserId>
<t:ReceiveCopiesOfMeetingMessages>false</t:ReceiveCopiesOfMeetingMessages>
<t:ViewPrivateItems>false</t:ViewPrivateItems>
</m:DelegateUser>
</m:DelegateUserResponseMessageType>
<m:DelegateUserResponseMessageType ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:DelegateUser>
<t:UserId>
<t:SID>S-1-5-21-1337771579-694202782-848329751-1535223</t:SID>
<t:PrimarySmtpAddress>emaildelegate@contoso.com</t:PrimarySmtpAddress>
<t:DisplayName>emaildelegate</t:DisplayName>
</t:UserId>
<t:ReceiveCopiesOfMeetingMessages>false</t:ReceiveCopiesOfMeetingMessages>
<t:ViewPrivateItems>false</t:ViewPrivateItems>
</m:DelegateUser>
</m:DelegateUserResponseMessageType>
</m:ResponseMessages>
</m:AddDelegateResponse>
</s:Body>
</s:Envelope>
Удаление делегатов с помощью управляемого API EWS
Делегаты из целевого почтового ящика можно удалить с помощью метода Управляемого API ExchangeService.RemoveDelegates EWS. В этом примере разрешения делегата, заданные в примере добавления делегата , удаляются.
В этом примере предполагается, что служба является допустимым объектом ExchangeService для владельца почтового ящика и что пользователь прошел проверку подлинности на сервере Exchange Server.
public static Collection<DelegateUserResponse> RemoveDelegates(ExchangeService service)
{
// Create a list to hold the delegates to delete.
List<UserId> deletedDelegates = new System.Collections.Generic.List<UserId>();
// Add the delegate to the list of new delegates.
deletedDelegates.Add("calendardelegate@contoso.com");
// Add the delegate to the list of new delegates.
deletedDelegates.Add("contactdelegate@contoso.com");
// Add the delegate to the list of new delegates.
deletedDelegates.Add("emaildelegate@contoso.com");
// Create a mailbox object that represents the mailbox owner.
Mailbox mailbox = new Mailbox("primary@contoso.com");
// Call the AddDelegates method to add the delegates to the target mailbox.
Collection<DelegateUserResponse> response = service.RemoveDelegates(mailbox, deletedDelegates);
foreach (DelegateUserResponse resp in response)
{
// Print out the result and the last eight characters of the item ID.
Console.WriteLine("Result: {0}", resp.Result);
Console.WriteLine("Error Code: {0}", resp.ErrorCode);
Console.WriteLine("ErrorMessage: {0}\r\n", resp.ErrorMessage);
}
return response;
}
Удаление делегатов с помощью EWS
Делегаты из почтового ящика можно удалить с помощью операции RemoveDelegate EWS. В этом примере разрешения делегата, заданные в примере добавления делегата , удаляются.
Это также XML-запрос, который управляемый API EWS отправляет при использовании метода RemoveDelegates для удаления делегатов.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<t:RequestServerVersion Version="Exchange2007_SP1" />
</soap:Header>
<soap:Body>
<m:RemoveDelegate>
<m:Mailbox>
<t:EmailAddress>primary@contoso.com</t:EmailAddress>
</m:Mailbox>
<m:UserIds>
<t:UserId>
<t:PrimarySmtpAddress>calendardelegate@contoso.com</t:PrimarySmtpAddress>
</t:UserId>
<t:UserId>
<t:PrimarySmtpAddress>contactdelegate@contoso.com</t:PrimarySmtpAddress>
</t:UserId>
<t:UserId>
<t:PrimarySmtpAddress>emaildelegate@contoso.com</t:PrimarySmtpAddress>
</t:UserId>
</m:UserIds>
</m:RemoveDelegate>
</soap:Body>
</soap:Envelope>
Сервер отвечает на запрос RemoveDelegate сообщением AddDelegateResponse , которое содержит значение элемента ResponseCodeNoError, указывающее, что делегаты были успешно удалены.
Дальнейшие действия
После добавления делегатов в папки календаря, электронной почты и задач делегат может получить доступ к элементам в папках. Дополнительные сведения см. в следующих статьях:
Доступ к электронной почте в качестве делегата с помощью EWS в Exchange
Доступ к календарю в качестве делегата с помощью EWS в Exchange
Доступ к контактам в качестве делегата с помощью EWS в Exchange
Если папки, для которых были добавлены делегаты, включают дочерние папки, созданные до предоставления доступа делегату, делегат не сможет получить доступ к этим папкам без дополнительных разрешений. Чтобы добавить эти разрешения или изменить разрешения для любых других папок, см. раздел Установка разрешений для папок для другого пользователя с помощью EWS в Exchange.
См. также
- Передача прав доступа и EWS в Exchange
- Exchange 2013: добавление делегирования пользователей в учетную запись электронной почты программными средствами
- Exchange 2013: программное обновление делегатов, связанных с учетными записями электронной почты
- Exchange 2013: программное удаление делегатов, связанных с учетными записями электронной почты