Exchange 2013 の EWS を使用して配布グループを展開する
Exchange で EWS マネージ API または EWS を使用して配布グループを展開する方法について説明します。
ExchangeService.ExpandGroup EWS マネージ API メソッドまたは ExpandDL EWS 操作を使用して、配布グループを展開し、すべての受信者を識別できます。
ExpandGroup メソッドはオーバーロードされているため、いくつかの方法で呼び出すことができます。
ExpandGroup(String): SMTP アドレスによって識別されるグループを展開します。
ExpandGroup(EmailAddress): メール アドレスによって識別されるグループを展開します。
ExpandGroup(ItemId): グループ ID によって識別されるグループを展開します。
ExpanGroup(String, String): SMTP アドレスと、そのアドレスのルーティングの種類によって識別されるグループを展開します。
EWS マネージ API を使用してユニバーサル配布グループまたはセキュリティ グループを展開する
次の例では、メール アドレスを使ってユニバーサル配布グループまたはセキュリティ グループを展開する方法を示します。これは最も簡単なアプローチです。 この例では、service が有効な ExchangeService オブジェクトであり、ユーザーが Exchange サーバーに既に認証されていると想定しています。
// 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");
EWS マネージ API を使用して連絡先グループを展開する
連絡先グループには関連付けられているメール アドレスがないため、ExpandGroup(ItemId) メソッドを使用して、ItemId に基づいてグループを展開する必要があります。 前の例のように関数を作成し、2 番目のパラメーターの型を文字列から 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 を使用して、ユニバーサル配布グループまたはセキュリティ グループを展開する
次の例では、ExpandDL 操作を使用するときにクライアントからサーバーに送信される XML 要求メッセージを示します。 これは、EWS マネージ API を使用してユニバーサル配布グループを展開する場合に、EWS マネージ API が送信する XML 要求でもあります。
<?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>
EWS マネージ API を使用する場合とは異なり、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 応答の構造は、ユニバーサル配布グループを展開するための要求への応答と同じです。