Как: развернуть группы рассылки с помощью EWS в Exchange 2013
Узнайте, как развернуть группу рассылки с помощью управляемого API EWS или EWS в Exchange.
Для развертывания группы рассылки для идентификации всех получателей можно использовать метод Управляемого API ExchangeService.ExpandGroup EWS или операцию ExpandDL EWS.
Так как метод ExpandGroup перегружен, его можно вызвать несколькими способами:
ExpandGroup(String) — разворачивает группу, определяемую SMTP-адресом.
ExpandGroup(EmailAddress) — разворачивает группу, определяемую адресом электронной почты.
ExpandGroup(ItemId) — разворачивает группу, определяемую идентификатором группы.
ExpanGroup(String, String) — расширяет группу, определяемую SMTP-адресом и типом маршрутизации этого адреса.
Развертывание универсальной группы рассылки или группы безопасности с помощью управляемого API EWS
В следующем примере показано, как развернуть универсальную группу рассылки или группу безопасности с помощью адреса электронной почты, что является самым простым подходом. В этом примере предполагается, что служба является действительным объектом ExchangeService, и что пользователь прошел проверку подлинности на сервере Exchange server.
// Return the expanded group.
ExpandGroupResults myGroupMembers = service.ExpandGroup("employees@contoso.com");
// Display the group members.
foreach (EmailAddress address in myGroupMembers.Members)
{
Console.WriteLine("Email Address: {0}", address);
}
Это не так много кода, но он также довольно прост и может не дать вам то, что вы ищете. Итак, давайте пойдем на шаг дальше. Группы рассылки также могут содержать другие группы рассылки. Простое развертывание приведет к выводу адреса электронной почты содержащихся групп рассылки, но не к их развертыванию. Добавив еще несколько строк кода, вы можете рекурсивно развернуть группы для вывода каждого контакта.
private static void ExpandDistributionLists(ExchangeService service, string Mailbox)
{
// Return the expanded group.
ExpandGroupResults myGroupMembers = service.ExpandGroup(Mailbox);
// Display the group members.
foreach (EmailAddress address in myGroupMembers.Members)
{
// Check to see if the mailbox is a public group
if (address.MailboxType == MailboxType.PublicGroup)
{
// Call the function again to expand the contained
// distribution group.
ExpandDistributionLists(service, address.Address);
}
else
{
// Output the address of the mailbox.
Console.WriteLine("Email Address: {0}", address);
}
}
}
Теперь вы можете вызвать эту новую функцию в коде и развернуть все общедоступные группы рассылки, содержащиеся в первой.
ExpandDistributionLists(service, "employees@contoso.com");
Развертывание группы контактов с помощью управляемого API EWS
Так как у групп контактов нет связанного адреса электронной почты, необходимо развернуть группу на основе ItemId с помощью метода ExpandGroup(ItemId). Можно создать функцию, как показано в предыдущем примере, и изменить второй тип параметра со строки на ItemId.
private static void ExpandContactGroup(ExchangeService service, ItemId groupID)
{
// Return the expanded group.
ExpandGroupResults myGroupMembers = service.ExpandGroup(groupID);
// Display the group members.
foreach (EmailAddress address in myGroupMembers.Members)
{
if (address.MailboxType == MailboxType.PublicGroup)
{
ExpandDistributionLists(service, address.Address);
}
else
{
Console.WriteLine("Email Address: {0}", address);
}
}
}
Теперь эту функцию можно вызвать с помощью объекта службы Exchange и ItemId группы контактов. Обратите внимание, что itemId в примере сокращен для удобства чтения.
ExpandContactGroup(service, new ItemId("AAMkADBlY…");
Развертывание универсальной группы рассылки или группы безопасности с помощью EWS
В следующем примере показано сообщение XML-запроса, которое отправляется от клиента на сервер при использовании операции ExpandDL . Это также XML-запрос, который отправляет управляемый API EWS при использовании управляемого API EWS для расширения универсальной группы рассылки.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Body>
<ExpandDL xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<Mailbox>
<t:EmailAddress>employees@contoso.com</t:EmailAddress>
</Mailbox>
</ExpandDL>
</soap:Body>
</soap:Envelope>
В следующем примере показано XML-ответное сообщение, которое отправляется с сервера клиенту. Обратите внимание, что возвращаются как почтовые ящики, так и универсальные группы рассылки.
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ExpandDLResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ResponseMessages xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
<ExpandDLResponseMessage ResponseClass="Success">
<ResponseCode>NoError</ResponseCode>
<DLExpansion IncludesLastItemInRange="true" TotalItemsInView="4">
<Mailbox xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<Name>Sadie Daniels</Name>
<EmailAddress>sadie@contoso.com</EmailAddress>
<RoutingType>SMTP</RoutingType>
<MailboxType>Mailbox</MailboxType>
</Mailbox>
<Mailbox xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<Name>Alfred Welker</Name>
<EmailAddress>alfred@contoso.com</EmailAddress>
<RoutingType>SMTP</RoutingType>
<MailboxType>Mailbox</MailboxType>
</Mailbox>
<Mailbox xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<Name>Contoso Sales</Name>
<EmailAddress>sales@contoso.com</EmailAddress>
<RoutingType>SMTP</RoutingType>
<MailboxType>PublicDL</MailboxType>
</Mailbox>
<Mailbox xmlns="http://schemas.microsoft.com/exchange/services/2006/types">
<Name>Contoso Support</Name>
<EmailAddress>support@contoso.com</EmailAddress>
<RoutingType>SMTP</RoutingType>
<MailboxType>PublicDL</MailboxType>
</Mailbox>
</DLExpansion>
</ExpandDLResponseMessage>
</ResponseMessages>
</ExpandDLResponse>
</s:Body>
</s:Envelope>
В отличие от управляемого API EWS, при использовании EWS для развертывания универсальной группы рассылки вы не можете рекурсивно развернуть возвращаемые группы рассылки. Вам потребуется отправить дополнительный запрос на расширение каждой из групп рассылки, включенных в ответ.
Развертывание группы контактов с помощью EWS
XML-запрос на развертывание группы контактов аналогичен запросу на развертывание группы рассылки. Вместо адреса электронной почты используйте ItemId группы контактов. Значение ItemId в этом примере сокращено для удобства чтения.
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<soap:Body>
<ExpandDL xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<Mailbox>
<ItemId xmlns="http://schemas.microsoft.com/exchange/services/2006/types" Id="AAMkADBlY…" />
</Mailbox>
</ExpandDL>
</soap:Body>
</soap:Envelope>
Структура XML-ответа на запрос на расширение группы контактов аналогична ответу на запрос на расширение универсальной группы рассылки.