2012-02-10 11 views
13

Sto cercando di recuperare gli elementi della posta in arrivo da una casella di posta specifica (in cui dispongo delle autorizzazioni), utilizzando l'API gestita dai servizi Web di Exchange. Ho provato il codice prima usando il mio indirizzo e-mail tramite AutodiscoverUrl, e funziona perfettamente. Tuttavia, quando ho provato a utilizzare l'altro indirizzo di posta elettronica, EWS recupera ancora gli elementi della posta in arrivo di . È dovuto a una cache o qualcosa del genere?Elementi errati della cassetta postale recuperati utilizzando l'API gestita dai servizi Web di Exchange in C#

Il mio codice è il seguente:

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

risposta

29

L'indirizzo e-mail assegnato AutodiscoverUrl non ha nulla a che fare con la casella e si sono vincolanti per.

Ci sono (almeno) due modi per ottenere gli elementi della posta in arrivo dalla cassetta postale di un altro utente: Delegare l'accesso e la rappresentazione.

Se si ha accesso delegato alla cassetta postale altri utenti, è possibile specificare la cassetta postale come parametro nella chiamata a FindItems:

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

Se avete la permissions to impersonate l'altro utente, è possibile impersonare l'altro utente durante la connessione al server Web incorporato e la successiva chiamata a FindItem lavorerà sulla casella di posta dell'utente rappresentato:

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

Disclaimer: ho scritto il codice di cui sopra senza realmente testarlo su un vero server Exchange.

+1

Grazie, poiché ho accesso delegato (e nessuna autorizzazione impersonata) ho fatto il tuo primo approccio e ha funzionato! – communista

+1

Un risparmiatore! Grazie! –

+0

Mi ci è voluto troppo tempo per capire questo: 1) determinare il filtro che include le cassette postali di destinazione: 'Import-Module ActiveDirectory; get-aduser -filter * | dove {$ _. samaccountname -like "bob"} ', 2) crea un ambito di gestione che include le cassette postali di destinazione' new-ManagementScope -Name bob_targetuser -RecipientRestrictionFilter {samaccountname -like "bob"} '; 3) assegnare l'ambito all'oggetto ACL: 'New-ManagementRoleAssignment -Name appimpersonationrole -Role ApplicationImpersonation -Utente utente che ha tutti i diritti di personale -CustomRecipientWriteScope bob_targetuser' – mbrownnyc

11

se si desidera inviare e-mail utilizzando , solo i delegati consentono di salvare l'e-mail prima di inviarlo. imposterà l'indirizzo SMTP che è necessario per inviare il messaggio.

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

ho usato per evitare questo errore: "Quando si effettua una richiesta da un account che non dispone di una cassetta postale, è necessario specificare l'indirizzo SMTP primario della cassetta postale per qualsiasi cartella distinta Ids"

+1

Stavo cercando di inviare una e-mail da un account condiviso usando la rappresentazione, non funzionava con il seguente errore: "L'account non dispone dell'autorizzazione per impersonare l'utente richiesto." Eppure il sito Web di Exchange Online mi consente di inviare e-mail come utente condiviso. Questo mi ha infastidito fino a quando ho trovato questa risposta, qualcosa di molto simile a questo ha funzionato per quello che stavo cercando di fare. Salvare prima è la chiave. Grazie. post scriptum Sto usando Salva poi SendAndSaveCopy. –

Problemi correlati