Exchange Webサービスで管理されているAPIを使用して、特定のメールボックス(アクセス許可がある)から受信トレイアイテムを取得しようとしています。 AutodiscoverUrlを介して自分のメールアドレスを使用して最初にコードをテストしましたが、正常に機能します。ただし、他の電子メールアドレスを使用しようとすると、EWSはまだ私のown受信ボックスアイテムを取得します。これはキャッシュか何かによるものですか?
私のコードは次のとおりです。
ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
ex.AutodiscoverUrl("[email protected]");
FindItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
foreach (Item item in findResults.Items)
Console.WriteLine(item.Subject);
AutodiscoverUrl
に指定された電子メールアドレスは、バインドしているメールボックスとは関係ありません。
別のユーザーのメールボックスから受信トレイアイテムを取得するには、(少なくとも)2つの方法があります。アクセスの委任と偽装です。
他のユーザーのメールボックスへの委任アクセス権がある場合は、FindItems
の呼び出しでパラメーターとしてメールボックスを指定できます。
FindItemsResults<Item> findResults = ex.FindItems(
new FolderId(WellKnownFolderName.Inbox, new Mailbox("[email protected]")),
new ItemView(10));
偽装の許可 他のユーザーがいる場合、EWSに接続するときに他のユーザーを偽装でき、次のFindItem
の呼び出しが偽装ユーザーの受信ボックスで機能します。
ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
ex.AutodiscoverUrl("[email protected]");
ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "[email protected]");
ItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10));
免責事項:実際のExchangeサーバーで実際にテストせずに、上記のコードを記述しました。
代理人のみ権限を使用してメールを送信する場合は、送信する前にまずメールを保存してください。メッセージの送信に必要なSMTPアドレスを設定します。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.Credentials = new WebCredentials("user1", "1234", "domain.com");
service.AutodiscoverUrl("[email protected]");
EmailMessage email = new EmailMessage(service);
email.ToRecipients.Add("[email protected]");
email.Subject = "HelloWorld";
email.Body = new MessageBody("Sent by using the EWS Managed API");
//save it first!
email.Save(new FolderId(WellKnownFolderName.Drafts, "[email protected]"));
email.Send();
このエラーを回避するために使用しました:「メールボックスを持たないアカウントとしてリクエストを行う場合は、識別されたフォルダーIDのメールボックスプライマリSMTPアドレスを指定する必要があります。」