Exchange Web Services を経由して、アクセスに使っている Credendial とは違うユーザーのメールボックスにアクセスしたいときは、ImpersonatedUserId を使ってアクセスしたいメールボックスのアカウントを指定します。
この際に、アクセス先のメールボックスの権限設定を行うだけでは、ユーザー偽装ができず正しくアクセスできません。

これはユーザーの偽装を行うために必要な権限が Active Directory に設定されていない場合に発生します。
偽装してアクセスするためには、サーバーでのアクセス偽装の権限設定と、メールボックス自体での偽装の設定が必要です。

権限を設定するには、Exchange 管理シェルで次のコマンドを実行します。

// すべてのクライアントアクセスサーバーで、Administrator に偽装を許可する
Get-ExchangeServer | where {$_.IsClientAccessServer -eq $TRUE} | ForEach-Object {Add-ADPermission -Identity $_.distinguishedname -User (Get-User -Identity "Administrator" | select-object).identity -extendedRight ms-Exch-EPI-Impersonation}

// すべてのメールボックスデータベースで、Administrator に偽装を許可する
Get-MailboxDatabase | ForEach-Object {Add-ADPermission -Identity $_.DistinguishedName -User "Administrator" -ExtendedRights ms-Exch-EPI-May-Impersonate}

この権限を付与されれば EWS を呼び出す次のようなコードを使うことで、ほかのユーザーのメールボックスにアクセスできるようになります。

// 指定したアドレスを持つユーザーのメールボックスに接続するために偽装を行う
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "User1@exchange.local");

Currently rated 2.2 by 27 people

  • Currently 2.222223/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Comments are closed