2012-02-10 10 views
13

Exchange Webサービス管理APIを使用して特定のメールボックス(権限がある)から受信トレイアイテムを取得しようとしています。私はAutodiscoverUrlを介して自分の電子メールアドレスを使用してコードをテストしたところ、正常に動作します。しかし、他のメールアドレスを使用しようとすると、EWSは自分の受信トレイのアイテムを引き続き検索します。これはキャッシュなのでしょうか?次のようにC#のExchange Webサービス管理APIを使用して間違ったメールボックスアイテムを取得しています

私のコードは次のとおりです。

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

答えて

29

AutodiscoverUrlに与えられた電子メールアドレスは、あなたがに結合されているメールボックスとは何の関係もありません。

他のユーザーのメールボックスから受信ボックスアイテムを取得するには、少なくとも2つの方法があります。アクセスと偽装を委任する。

あなたが他のユーザーのメールボックスへの代理アクセス権を持っている場合、あなたはFindItemsへの呼び出しのパラメータとしてメールボックスを指定することができます。

FindItemsResults<Item> findResults = ex.FindItems(
    new FolderId(WellKnownFolderName.Inbox, new Mailbox("[email protected]")), 
    new ItemView(10)); 

あなたはpermissions to impersonate他のユーザーを持っている場合は、あなたが他になりすますことができますユーザー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サーバー。

+1

ありがとう、私は委任アクセス権(および偽装権限はないので)私はあなたの最初のアプローチを行い、それは働いた! – communista

+1

セーバー!ありがとう! –

+0

これは、おそらく私はこれを理解するのに時間がかかりました:1)ターゲットメールボックスを含むフィルタを決定する: 'Import-Module ActiveDirectory; get-aduser -filter * | {$ _。samaccountname-like "bob"} 'のように、2)対象のメールボックスを含む管理スコープを作成します。 3)オブジェクトACLにスコープを割り当てます: 'New-ManagementRoleAssignment -Name appimpersonationrole -Role ApplicationImpersonation -UseruserethisallowedImpersonationreights -CustomRecipientWriteScope bob_targetuser' – mbrownnyc

11

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

+1

私は偽装を使用して共有アカウントから電子メールを送信しようとしましたが、これは動作しませんでした次のエラー: "アカウントには、要求されたユーザーを偽装する権限がありません。"しかし、Exchange OnlineのWebサイトでは、共有ユーザーとして電子メールを送信できます。私がこの答えを見つけるまで、これは私を悩ましていました。これとかなり似た何かが私がやろうとしていたことのために働いていました。最初に保存することが重要です。ありがとうございました。 p.s.私はSaveとSendAndSaveCopyを使用しています。 –

関連する問題