web-dev-qa-db-ja.com

C#でExchangeWebサービスマネージAPIを使用して取得されている間違ったメールボックスアイテム

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);
15
communista

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サーバーで実際にテストせずに、上記のコードを記述しました。

31

代理人のみ権限を使用してメールを送信する場合は、送信する前にまずメールを保存してください。メッセージの送信に必要な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アドレスを指定する必要があります。」

12
Asaf Magen