2012-02-10 65 views
13

我試圖從特定郵箱(我有權限)中使用Exchange Web服務託管API檢索收件箱項目。我已經使用自己的電子郵件地址通過AutodiscoverUrl測試了代碼,並且它工作正常。但是,當我嘗試使用其他電子郵件地址時,EWS仍然檢索我的自己的收件箱項目。這是由於緩存或什麼?使用C#中的Exchange Web Services託管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電子郵件地址無關與郵箱,你可以綁定到。

有(至少)兩種方式從另一個用戶郵箱獲取收件箱項目:委派訪問和模擬。

如果您有其他用戶郵箱的代理訪問,您可以指定郵箱作爲調用的參數來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 2012-02-13 05:33:15

+1

節省!謝謝! – 2013-04-18 05:55:02

+0

我花了太多時間來解決這個問題:1)確定包含目標郵箱的過濾器:'Import-Module ActiveDirectory; get-aduser -filter * |其中{$ _。samaccountname-like「bob」}',2)創建一個包含目標郵箱的管理作用域'new-ManagementScope -Name bob_targetuser -RecipientRestrictionFilter {samaccountname-like「bob」}'; 3)將範圍分配給對象ACL:'New-ManagementRoleAssignment -Name appimpersonationrole -Role ApplicationImpersonation -User usernamethatisallowedImpersonzationrights -CustomRecipientWriteScope bob_targetuser' – mbrownnyc 2017-08-11 15:36:35

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網站允許我以共享用戶的身份發送電子郵件。直到我找到這個答案時,這一直困擾着我,這與我正在嘗試做的事很相似。首先節省是關鍵。謝謝。附:我正在使用Save和SendAndSaveCopy。 – 2013-10-03 09:42:09

相關問題