自動検出を使用して Exchange からユーザー設定を取得する
自動検出を使用して Exchange サーバーからユーザー構成設定を取得する方法について説明します。
自動検出では、ユーザーの電子メール アドレスとパスワードだけを使用して、ユーザーの構成情報に簡単にアクセスできるようにすることで、アプリケーションの構成が簡略化されます。 ユーザーの表示名や外部の Web サービスの URL など、多くのユーザー構成設定が自動検出で利用できます。
自動検出サービスからユーザーの設定を取得するために、次の開発テクノロジのうちのいずれかを使用できます。
EWS マネージ API は、ユーザー設定を取得するためのオブジェクト ベースのインターフェイスを提供します。 クライアント アプリケーションがマネージ コードを使用する場合は、EWS マネージ API を使用することをお勧めします。 EWS マネージ API を使用している場合は、必要な設定が Microsoft.Exchange.WebServices.Autodiscover.UserSettingName 列挙型で利用可能かどうかを判別します。 利用可能でない場合は、SOAP または POX の自動検出サービスの使用をお勧めします。
Web サービスを使用している場合は、POX の自動検出サービスよりも豊富な機能をサポートしている SOAP の自動検出サービスの使用をお勧めします。 SOAP の自動検出サービスを使用できない場合、POX の自動検出サービスは代替として最適です。
ユーザー設定を取得するように設定する
自動検出サービスを使用してユーザー設定を取得する前に、次のものを使用しているか確認してください。
EWS マネージ API または POX ベースの自動検出サービス、Exchange Online 、Office 365 の一部としての Exchange Online、または Exchange 2007 SP1 以降のバージョンの Exchange を実行しているサーバーを使用しているか。
SOAP ベースの自動検出サービス、Exchange Online、または Exchange 2010 以降のバージョンの Exchange を使用しているか。
注:
EWS マネージ API を使用している場合は、状況によっては証明書の検証コールバック メソッドを指定する必要があります。 また、Visual Studio で作成されたものなど、生成されたいくつかのプロキシ ライブラリを使用した、証明書の検証コールバック メソッドが必要になる場合もあります。
EWS マネージ API を使用してユーザー設定を取得する
GetUserSettings メソッドを使用して、次の例のように、ユーザーの構成情報を取得します。 この例では、(UserSettingName 列挙型で利用できるものから) 返されるユーザー設定の配列を指定でき、メソッドは Exchange サーバーからのリダイレクト応答に従います。
using System;
using System.Net;
using Microsoft.Exchange.WebServices.Autodiscover;
public static GetUserSettingsResponse GetUserSettings(
AutodiscoverService service,
string emailAddress,
int maxHops,
params UserSettingName[] settings)
{
Uri url = null;
GetUserSettingsResponse response = null;
for (int attempt = 0; attempt < maxHops; attempt++)
{
service.Url = url;
service.EnableScpLookup = (attempt < 2);
response = service.GetUserSettings(emailAddress, settings);
if (response.ErrorCode == AutodiscoverErrorCode.RedirectAddress)
{
url = new Uri(response.RedirectTarget);
}
else if (response.ErrorCode == AutodiscoverErrorCode.RedirectUrl)
{
url = new Uri(response.RedirectTarget);
}
else
{
return response;
}
}
throw new Exception("No suitable Autodiscover endpoint was found.");
}
ユーザー設定の配列の各キー/値ペアにアクセスするために返されるコレクションを解析することができます。 次の使用例は、返された各要素を解析し、各キー/値ペアの名前と値を表示する方法を示しています。
// Display each retrieved value. The settings are part of a key/value pair.
// userresponse is a GetUserSettingsResonse object.
foreach (KeyValuePair<UserSettingName, Object> usersetting in userresponse.Settings)
{
Console.WriteLine(usersetting.Key.ToString() + ": " + usersetting.Value);
}
または、特定の設定の値を取得できます。 次の例では、UserDisplayName の設定が表示されます。
// Display a specific setting, such as UserDisplayName.
Console.WriteLine(userresponse.Settings[UserSettingName.UserDisplayName]);
SOAP 自動検出を使用してユーザー設定を取得する
EWS マネージ API を使用していない場合は、SOAP の自動検出 Web サービスを使用することをお勧めします。 SOAP の自動検出 Web サービスが失敗した、または利用できない場合にのみ、POX 自動検出 Web サービスを使用します。
ユーザー設定を取得するには、GetUserSettings 操作 (SOAP) を使用します。 指定された設定は UserSetting 要素として返されます。
次の例では、サーバーからユーザー設定を取得する SOAP 自動検出要求を示しています。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:a="https://schemas.microsoft.com/exchange/2010/Autodiscover"
xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:soap="https://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<a:RequestedServerVersion>Exchange2013</a:RequestedServerVersion>
<wsa:Action>https://schemas.microsoft.com/exchange/2010/Autodiscover/Autodiscover/GetUserSettings</wsa:Action>
<wsa:To>https://autodiscover.exchange.microsoft.com/autodiscover/autodiscover.svc</wsa:To>
</soap:Header>
<soap:Body>
<a:GetUserSettingsRequestMessage xmlns:a="https://schemas.microsoft.com/exchange/2010/Autodiscover">
<a:Request>
<a:Users>
<a:User>
<a:Mailbox>mara@contoso.com</a:Mailbox>
</a:User>
</a:Users>
<a:RequestedSettings>
<a:Setting>UserDisplayName</a:Setting>
<a:Setting>UserDN</a:Setting>
<a:Setting>UserDeploymentId</a:Setting>
<a:Setting>InternalMailboxServer</a:Setting>
<a:Setting>MailboxDN</a:Setting>
<a:Setting>PublicFolderServer</a:Setting>
<a:Setting>ActiveDirectoryServer</a:Setting>
<a:Setting>ExternalMailboxServer</a:Setting>
<a:Setting>EcpDeliveryReportUrlFragment</a:Setting>
<a:Setting>EcpPublishingUrlFragment</a:Setting>
<a:Setting>EcpTextMessagingUrlFragment</a:Setting>
<a:Setting>ExternalEwsUrl</a:Setting>
<a:Setting>CasVersion</a:Setting>
<a:Setting>EwsSupportedSchemas</a:Setting>
<a:Setting>GroupingInformation</a:Setting>
</a:RequestedSettings>
</a:Request>
</a:GetUserSettingsRequestMessage>
</soap:Body>
</soap:Envelope>
次の例では、クライアントからの要求を解析した後に、サーバーによって返される SOAP 応答を示します。 応答には、要求される設定のみが含まれます (存在する場合)。
<s:Envelope xmlns:s="https://schemas.xmlsoap.org/soap/envelope/" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">https://schemas.microsoft.com/exchange/2010/
Autodiscover/Autodiscover/GetUserSettingsResponse</a:Action>
<h:ServerVersionInfo xmlns:h="https://schemas.microsoft.com/exchange/2010/Autodiscover"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<h:MajorVersion>15</h:MajorVersion>
<h:MinorVersion>0</h:MinorVersion>
<h:MajorBuildNumber>160</h:MajorBuildNumber>
<h:MinorBuildNumber>4</h:MinorBuildNumber>
<h:Version>Exchange2013</h:Version>
</h:ServerVersionInfo>
</s:Header>
<s:Body>
<GetUserSettingsResponseMessage xmlns="https://schemas.microsoft.com/exchange/2010/Autodiscover">
<Response xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ErrorCode>NoError</ErrorCode>
<ErrorMessage />
<UserResponses>
<UserResponse>
<ErrorCode>NoError</ErrorCode>
<ErrorMessage>No error.</ErrorMessage>
<RedirectTarget i:nil="true" />
<UserSettingErrors />
<UserSettings>
<UserSetting i:type="StringSetting">
<Name>UserDisplayName</Name>
<Value>Mara Whitley</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>UserDN</Name>
<Value>/o=microsoft/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=mara</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>UserDeploymentId</Name>
<Value>649d50b8-a1ce-4bac-8ace-2321 e463f701</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>CasVersion</Name>
<Value>15.01.0160.004</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>EwsSupportedSchemas</Name>
<Value>Exchange2007, Exchange2007_SP1, Exchange2010, Exchange2010_SP1, Exchange2010_SP2, Exchange2013</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>InternalMailboxServer</Name>
<Value>mail.contoso.com</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>ActiveDirectoryServer</Name>
<Value>dc.contoso.com</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>MailboxDN</Name>
<Value>/o=microsoft/ou=Exchange Administrative Group
(FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=mail.contoso.com/cn=Contoso Private MDB</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>PublicFolderServer</Name>
<Value>public.contoso.com</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>EcpDeliveryReportUrlFragment</Name>
<Value>PersonalSettings/DeliveryReport.aspx?exsvurl=1&amp;IsOWA=&lt;IsOWA&gt;&amp;MsgID=&lt;MsgID&gt;&amp;Mbx=&lt;Mbx&gt;</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>EcpTextMessagingUrlFragment</Name>
<Value>?p=sms/textmessaging.slab&amp;exsvurl=1</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>EcpPublishingUrlFragment</Name>
<Value>customize/calendarpublishing.slab?exsvurl=1&amp;FldID=&lt;FldID&gt;</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>ExternalEwsUrl</Name>
<Value>https://mail.contoso.com/EWS/Exchange.asmx</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>ExternalMailboxServer</Name>
<Value>mail.contoso.com</Value>
</UserSetting>
<UserSetting i:type="StringSetting">
<Name>GroupingInformation</Name>
<Value>CONTOSO-1</Value>
</UserSetting>
</UserSettings>
</UserResponse>
</UserResponses>
</Response>
</GetUserSettingsResponseMessage>
</s:Body>
</s:Envelope
POX 自動検出を使用してユーザー設定を取得する
SOAP の自動検出 Web サービスを使用することをお勧めしますが、POX の自動検出 Web サービスは、SOAP が使用できない場合のための適切なバックアップ オプションです。 たとえば、Exchange 2007 は SOAP の自動検出 Web サービスをサポートしていないため、Exchange 2007 を対象としている場合は、POX の自動検出 Web サービスを利用する必要があります。 SOAP の自動検出 Web サービスとは異なり、POX の自動検出サービスでは特定の設定を要求できません。 その代わりに、サーバーが Protocol 要素の子要素として、使用可能な設定の完全な一覧を返します。
次の例では、サーバーからユーザー設定を取得する SOAP の自動検出要求を示しています。 次の XML は、HTTP POST 経由でサーバーに送信されます。
<?xml version="1.0" encoding="utf-8"?>
<Autodiscover xmlns="https://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
<Request>
<EMailAddress>mara@contoso.com</EMailAddress>
<AcceptableResponseSchema>https://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
</Request>
</Autodiscover>
次の例は、サーバーに返される POX の応答を示しています。
<?xml version="1.0" encoding="utf-8"?>
<Autodiscover xmlns="https://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
<Response xmlns="https://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
<User>
<DisplayName>Mara Whitley</DisplayName>
<LegacyDN>/o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=f5eeabead90d4b6fb51d6379474692cd-Mara</LegacyDN>
<AutoDiscoverSMTPAddress>mara@contoso.com</AutoDiscoverSMTPAddress>
<DeploymentId>50817eff-b925-4578-a0db-13bfc635e7a5</DeploymentId>
</User>
<Account>
<AccountType>email</AccountType>
<Action>settings</Action>
<MicrosoftOnline>False</MicrosoftOnline>
<Protocol>
<Type>EXCH</Type>
<Server>5f76be3c-9138-4f66-85e0-21bc23ca35f0@contoso.com</Server>
<ServerDN>/o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=5f76be3c-9138-4f66-85e0-21bc23ca35f0@contoso.com</ServerDN>
<ServerVersion>73C08204</ServerVersion>
<MdbDN>/o=First Organization/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=5f76be3c-9138-4f66-85e0-21bc23ca35f0@contoso.com/cn=Microsoft Private MDB</MdbDN>
<PublicFolderServer>public.contoso.com</PublicFolderServer>
<AD>dc.contoso.com</AD>
<ASUrl>https://mail.contoso.com/EWS/Exchange.asmx</ASUrl>
<EwsUrl>https://mail.contoso.com/EWS/Exchange.asmx</EwsUrl>
<EmwsUrl>https://mail.contoso.com/EWS/Exchange.asmx</EmwsUrl>
<EcpUrl>https://mail.contoso.com/ecp/</EcpUrl>
<EcpUrl-um>?rfr=olk&amp;p=customize/voicemail.aspx&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-um>
<EcpUrl-aggr>?rfr=olk&amp;p=personalsettings/EmailSubscriptions.slab&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-aggr>
<EcpUrl-mt>PersonalSettings/DeliveryReport.aspx?rfr=olk&amp;exsvurl=1&amp;IsOWA=&lt;IsOWA&gt;&amp;MsgID=&lt;MsgID&gt;&amp;Mbx=&lt;Mbx&gt;&amp;realm=contoso.com</EcpUrl-mt>
<EcpUrl-ret>?rfr=olk&amp;p=organize/retentionpolicytags.slab&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-ret>
<EcpUrl-sms>?rfr=olk&amp;p=sms/textmessaging.slab&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-sms>
<EcpUrl-publish>customize/calendarpublishing.slab?rfr=olk&amp;exsvurl=1&amp;FldID=&lt;FldID&gt;&amp;realm=contoso.com</EcpUrl-publish>
<EcpUrl-photo>PersonalSettings/EditAccount.aspx?rfr=olk&amp;chgPhoto=1&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-photo>
<EcpUrl-tm>?rfr=olk&amp;ftr=TeamMailbox&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-tm>
<EcpUrl-tmCreating>?rfr=olk&amp;ftr=TeamMailboxCreating&amp;SPUrl=&lt;SPUrl&gt;&amp;Title=&lt;Title&gt;&amp;SPTMAppUrl=&lt;SPTMAppUrl&gt;&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-tmCreating>
<EcpUrl-tmEditing>?rfr=olk&amp;ftr=TeamMailboxEditing&amp;Id=&lt;Id&gt;&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-tmEditing>
<EcpUrl-extinstall>Extension/InstalledExtensions.slab?rfr=olk&amp;exsvurl=1&amp;realm=contoso.com</EcpUrl-extinstall>
<OOFUrl>https://mail.contoso.com/EWS/Exchange.asmx</OOFUrl>
<UMUrl>https://mail.contoso.com/EWS/UM2007Legacy.asmx</UMUrl>
<OABUrl>https://mail.contoso.com/OAB/c21c7bc2-53b3-4ddc-ad89-1219b486c37c/</OABUrl>
<ServerExclusiveConnect>off</ServerExclusiveConnect>
</Protocol>
<Protocol>
<Type>EXPR</Type>
<Server>mail.contoso.com</Server>
<SSL>Off</SSL>
<AuthPackage>Ntlm</AuthPackage>
<ServerExclusiveConnect>on</ServerExclusiveConnect>
<CertPrincipalName>None</CertPrincipalName>
</Protocol>
<Protocol>
<Type>WEB</Type>
<Internal>
<OWAUrl AuthenticationMethod="Basic, Fba">https://mail.contoso.com/owa/</OWAUrl>
<Protocol>
<Type>EXCH</Type>
<ASUrl>https://mail.contoso.com/EWS/Exchange.asmx</ASUrl>
</Protocol>
</Internal>
</Protocol>
</Account>
</Response>
</Autodiscover>
次の手順
サーバーからユーザーのために必要な構成の詳細を取得すると、アプリケーションで必要な処理を行うために Exchange と通信する準備ができたことになります。 次のステップは、Exchange と通信する方法や、行う内容によって異なります。 いくらかインスピレーションが必要で、EWS を使用している場合は、アイデアを得るために、「Exchange 101 のコード サンプル」を確認することができます。