Exchange での代理人アクセスと EWS
Exchange の EWS マネージ API と EWS を使用してユーザーのメールボックスに代理人アクセスできるようにする方法を説明します。
ユーザーが他のユーザーのメールボックスにアクセスできるようにするには、次の 3 つの方法のいずれかを使用できます。
代理人を追加し、各代理人にアクセス許可を指定します。
フォルダーのアクセス許可を直接変更します。
偽装を使用します。
委任、およびフォルダーのアクセス許可は、各メールボックスに個別にアクセス許可を追加する必要があるため、少数のユーザーにのみアクセス許可を付与する場合に最適です。 偽装は、1 つのサービス アカウントによるデータベース内のすべてのメールボックスへのアクセスを簡単に許可できるため、多数のメールボックスを処理するときに最適です。 図 1 は、各種のアクセスの相違点を示しています。
図 1. 他のユーザーのメールボックスにアクセスする方法
メールの送信や会議のスケジュール設定に関しては、代理人に "代理送信" アクセス許可を付与できます。そのため、代理人によって送信されたメールまたは会議出席依頼の受信者は、Outlook でメールまたは会議出席依頼を受け取ると、メールボックス所有者に代わって "代理人" と表示されます。 「代理人として送信」のテキストを含めることは、クライアント実装の詳細事項の 1 つです。これは "from" と "sender" の値を使用して作成できます。 "from" の値はメールボックスの所有者を示し、"sender" の値はメール送信した代理人を示します。 ユーザーを偽装しているサービス アカウントが、メールボックスの所有者の代わりにメールの送信や会議のスケジュールを行う場合、メッセージはメールボックスの所有者「として」送信されます。 受信者には、サービス アカウントから送信されたメールであることを確認する手段はありません。 フォルダーのアクセス許可が付与され、代理人としてのアクセス権が付与されていないユーザーは、メールボックスの所有者として送信したり、代理送信したりできません。 そのようなユーザーはメールボックスのフォルダーへのアクセス権を持ち、フォルダーにアイテムを作成できる場合もありますが、アイテムを送信することはできません。
フォルダーのアクセス許可を直接変更するのが適しているのはどのような場合でしょうか。 一般に、フォルダーへのアクセスをユーザーに提供するものの「代理送信」のアクセス許可は付与しない場合、アクセス許可の要件が DelegateFolderPermissionLevel EWS マネージ API 列挙値または PermissionLevel EWS の要素の値にマップしない場合、または単一のカスタム フォルダーへのアクセスをユーザーに提供する場合です。
フォルダーのアクセス許可を変更するだけで目標を達成でき、代理人を追加する必要がない場合 (つまり、「代理送信」のアクセス許可が必要ない場合) は、「Exchange で EWS を使用して別のユーザーのフォルダーのアクセス許可を設定する」を参照してください。
なお、Outlook または Exchange Server PowerShell (Exchange 管理シェル) を使用して代理人アクセスを設定することもできます。
代理人アクセスはどのように機能するか
代理人アクセスにより、ユーザーはメールボックス所有者のフォルダーの一部または全部にアクセスし、メールボックス所有者の代理として行動できるようになります。 メールボックスの所有者はユーザーの場合もあれば、会議室のようなリソースの場合もあります。 たとえば、予約要求を処理するため、受付係に会議室の予定表フォルダーへの代理アクセス権を付与できます。 EWS マネージ API または EWS を使用すれば、メールボックスの所有者または管理者は、代理人を追加すること、代理人がアクセスできるフォルダーを指定すること、そのフォルダーに対するアクセス許可を指定することができるようになります。 代理人には、次のフォルダーへのアクセス権を与えることができます。
予定表
タスク
受信トレイ
連絡先
メモ
ジャーナル
これらのフォルダーの 1 つ以上に対する代理人アクセスを持つユーザーは、フォルダーに設定されているアクセス許可に応じて、そのフォルダーおよび子フォルダー内のアイテムの作成、取得、更新、削除、コピー、検索ができます。 アプリケーションがこれらのアクションを実行する方法は、明示的なアクセスと暗黙的なアクセスのどちらが必要かに応じて異なります。
代理アクセス権
管理者またはメールボックスの所有者がメールボックスに代理人を追加するときは、1 つ以上のフォルダーのアクセス許可レベルを設定することもできます。 フォルダーのアクセス許可レベルが設定されていない場合、アクセス許可の値の既定値は、[なし] に設定されます。 あるフォルダーに対して複数のユーザーが同じアクセス許可レベルを持つことも、ユーザーが持つアクセス許可レベルをフォルダーごとに変えることもできます。 EWS マネージ API を使用する場合は、DelegateUser.Permissions プロパティ (各フォルダーの DelegateFolderPermissionLevel 列挙値の 1 つを指定する) を使用して、フォルダーに対する代理アクセス権を設定します。 EWS を使用する場合は、DelegatePermissions 要素を使用して代理アクセス権を設定し、PermissionLevel 要素を使用してアクセス許可レベルを定義します。
表 2. 代理アクセス権レベル
アクセス許可レベル | 説明 |
---|---|
なし |
これはすべてのフォルダーの既定値です。 |
Author |
代理人は、アイテムの読み取りと作成、自分が作成したアイテムの変更と削除ができます。 たとえば、代理人はタスクの依頼や会議出席依頼をメールボックスの所有者のタスクのフォルダーまたは予定表のフォルダーに直接作成して、メールボックスの所有者の代わりにいずれかのアイテムを送信できます。 |
Editor (編集者) |
代理人は、Author にできるすべてのことに加え、メールボックスの所有者が作成したアイテムの変更や削除もできます。 |
Reviewer |
代理人はアイテムを読むことができます。たとえば、Reviewer のアクセス許可を持つ代理人は、別のユーザーの受信トレイのメッセージを読むことができます。 |
Custom |
メールボックスの所有者が代理人にアクセス許可のカスタム セットを与えている場合です。 |
DelegateUser.ViewPrivateItems EWS マネージ API プロパティと ViewPrivateItems EWS 要素は、メール、連絡先、予定表、タスク、メモ、ジャーナルのすべてのフォルダーを含む、メールボックス所有者のすべてのフォルダーに影響を与えるグローバルな設定です。 1 つのフォルダーだけを選んで、その中の非公開アイテムへのアクセスを許可することはできません。
明示的なアクセス
簡単に言うと、明示的なアクセスは、代理人がメールボックス所有者のフォルダーまたはアイテムに対してアクションを実行するためのエントリ方法です。 明示的なアクセスは、メールボックス所有者のフォルダーの既知のフォルダー名と、メールボックス所有者の SMTP アドレスをサーバーへの要求に含めると、代理人に付与されます。 代理人の要求は、メソッドまたは操作のコンテキストが代理人のメールボックスではなくメールボックス所有者のメールボックスであることを明示的に示しているため、アクセスは明示的です。
明示的なアクセスは、フォルダーまたはアイテムに対して実行されるすべてのメソッドまたは操作のコンテキストを定義します。 明示的なアクセスが設定されている場合に返されるすべてのアイテムとフォルダー ID は、メールボックス所有者に属していると一意に識別されます (ただし、人間が判読できる形式ではありません)。 この方法では、アプリケーションでメールボックス所有者の SMTP アドレスを何度も指定する必要はありません。コンテキストは識別子で非表示になります。 アイテムまたはフォルダーが識別された後、デリゲートは実際に 暗黙的なアクセス を使用してアイテムを変更します。 次の図は、明示的および暗黙的なアクセスを取得するプロセスを示しています。
図 2. アイテムまたはフォルダーへの明示的および暗黙的なアクセスの要求
様々なシナリオで明示的なアクセスを設定できます。 基本的に、フォルダー ID をメソッドまたは操作に入れて送信する場合は常に、明示的なアクセスを設定できます。 これには、フォルダーの検索、予定の検索、アイテムの取得、会話の検索などがあります。
明示的なアクセスと EWS マネージ API
FolderId 入力パラメーターでターゲット フォルダーを指定する次のオーバーロードされたメソッドのいずれかを使用すれば、明示的な代理人アクセスを開始できます。
その他多数。
これらの各メソッドで FolderId パラメーターを使用して、次のようにメールボックス所有者のターゲット フォルダーを指定できます。
new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com");
たとえば、予定表フォルダーにバインドするには、次の Bind メソッドの FolderId で既知のフォルダー名とメールボックス所有者の SMTP アドレスを指定します。
CalendarFolder calendar = CalendarFolder.Bind(service, new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com"), new PropertySet());
既知のフォルダー名と SMTP アドレスを指定すると、代理人はメールボックス所有者の予定表フォルダーにバインドできるため、フォルダーへの明示的なアクセスを取得できます。 これ以降、フォルダー内のアイテムに対する暗黙的なアクセスのすべての要求では、アイテム ID とフォルダー ID で返されるコンテキストを利用します。 基本的に、識別子には暗黙的な代理人アクセスの呼び出しのコンテキストが含まれています。 または、特定の条件を満たすアイテムのアイテム ID を取得するには、以下を使用します。
FindItemsResults<Item> results = service.FindItems(new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com"), filter, view);
この場合、アイテム ID が返された後、このアイテム ID を使用すれば、代理人は暗黙的なアクセスでアイテムを変更できます。
既存の明示的なアクセスでアクセスしていないアイテム ID またはフォルダー ID が必要になるまで、明示的なアクセスをもう一度開始する必要はありません。
明示的なアクセスと EWS
GetFolder、FindItem、または FindFolder 操作を使用して、明示的なアクセスを開始できます。 これらの操作は、 DistinguishedFolderId 要素を使用してターゲット フォルダーを識別するオプションを提供します。 DistinguishedFolderId 要素には、1 つの省略可能な子要素 Mailbox 要素があります。 Mailbox 要素は、DistinguishedFolderId 要素の子として使用される場合、デリゲートがアクセスするメールボックスを指定します。 呼び出し元のユーザーがメールボックス所有者のフォルダーにアクセスするアクセス許可を持っている場合、応答には、そのメールボックス内のアイテムまたはフォルダーに対する識別子のコレクションが含まれます。 応答で返されるアイテムとフォルダーの識別子は、暗黙的なデリゲート アクセスに使用できます。
暗黙的なアクセス
代理人がメールボックスの所有者のメールボックス内のアイテムまたはフォルダーの ID を取得したら、アイテムの更新、削除、またはコピーを行うとき、後は暗黙的なアクセスが使用されます。 代理人が要求でそのアイテム ID またはフォルダー ID を使用すると、メールボックス所有者のメールボックス内のアイテムに対して変更が加えられます。 代理人はメールボックス所有者の SMTP アドレスを含める必要はありません。
たとえば、代理人がメールボックス所有者のいずれかのフォルダーの ID を持っている場合、フォルダー ID を使用すれば、そのフォルダーに対して FindItem 操作を実行でき、メールボックス所有者のメールボックスを明示的に指定する必要はありません。 その時点で、代理人は応答で返される ID を使用して、メールボックス所有者のフォルダーにアクションを実行できます。
暗黙的なアクセスと EWS マネージ API
FindItems メソッドでアイテム ID を取得したら、後続の Item.Bind メソッドの呼び出しでそのアイテム ID を使用し、アイテムにバインドできます。 次いで、タスクを完了するために必要な Item.Update、Item.Delete、Item.Copy メソッド (あるいは、アイテム ID を必要とする任意のメソッド呼び出し) を呼び出すことができます。 アイテムを含むフォルダー (および該当する場合は、アイテムの移動先のフォルダー) の適切なアクセス許可を持っているなら、代理人はアクセス許可レベルに応じて変更を実行できます。
暗黙的なアクセスと EWS
FindItem 操作でアイテム ID を取得したら、後続の GetItem 操作でそのアイテム ID を使用して、アイテムにバインドできます。 次いで、タスクを完了するために必要な UpdateItem、DeleteItem、CopyItem 操作 (あるいはアイテム ID を必要とする任意の操作) を呼び出すことができます。 アイテムを含むフォルダー (および該当する場合は、アイテムの移動先のフォルダー) の適切なアクセス許可を持っているなら、代理人はアクセス許可レベルに応じて変更を実行できます。