risposta

14

Sì, è possibile, ma è necessario conoscere la password dell'altro utente o acquisire in qualche modo queste credenziali (oggetto NetworkCredential). I tipici prime righe di codice che si potrebbe essere

ExchangeService myService = new ExchangeService (ExchangeVersion.Exchange2007_SP1); 
myService.Credentials = new NetworkCredential ("[email protected]", "[email protected]"); 

in modo da poter accedere ai Servizi Web Exchange Server con l'account che è l'altro come l'utente corrente. Vedere la descrizione ExchangeService object per ulteriori informazioni.

Se sei un amministratore puoi creare l'utente impersonation by SMTP address.

+0

@Alfred Myers & @ user457261: Non hai scritto alcun commento. Le informazioni di cui ho scritto sono necessarie? – Oleg

+0

Grazie per la tua risposta, ma stavo cercando un modo senza dover conoscere tutte le password. Come usare un superutente che può accedere a tutti gli account. – Luke

+2

@Luke: le ultime frasi della mia risposta descrivono come eseguire questa operazione. Come "superadmin" puoi impersonare qualsiasi utente solo tramite l'indirizzo SMTP senza avere alcuna informazione sulla sua password. Guardare http://msdn.microsoft.com/en-us/library/dd633680(EXCHG.80).aspx ancora una volta. – Oleg

0

Suggerisco di utilizzare la rappresentazione anziché il login per ciascun utente. Per imitazione si può impersonare gli utenti. Non è come l'accesso completo. L'accesso completo è sul comportamento di, l'imitazione è come agire.

Un pre di rappresentazione è che si dispone di un nome utente e una password invece di avere x nomi utente e password.

È possibile utilizzare la rappresentazione come questo senso:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010); 
service.Credentials = new NetworkCredential(appName, appPassword, emailDomain); 
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, userToImpersonate); 

quando un utente deve delegare l'accesso a qualcun altro, è possibile accedere alla cartella dell'altro utente. Ad esempio: la Persona A verrà impersonata ed è in grado di accedere alla Persona B

4

Conoscere la password è errata e utilizzare la rappresentazione (in questi giorni) è errata.

Ecco come lo si fa.

 ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 
     //CREDENTIALS OF AN ACCOUNT WHICH HAS READ ACCESS TO THE CALENDAR YOU NEED 
     _service.Credentials = new WebCredentials(username, password); 
     _service.Url = new Uri(serviceURL); 

     SearchFilter.SearchFilterCollection searchFilter = new SearchFilter.SearchFilterCollection(); 
     searchFilter.Add(new SearchFilter.IsGreaterThanOrEqualTo(AppointmentSchema.Start, DateTime.Now.AddDays(-1))); 
     searchFilter.Add(new SearchFilter.IsLessThanOrEqualTo(AppointmentSchema.Start, DateTime.Now.AddDays(2))); 
     ItemView view = new ItemView(50); 
     view.PropertySet = new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.AppointmentType, AppointmentSchema.End); 

     //THIS NEXT LINE!!! 
     var calendarSearch = new FolderId(WellKnownFolderName.Calendar, new Mailbox("[email protected]")); 
     var appointments = _service.FindItems(calendarSearch, searchFilter, view); 
+0

Questa è una risposta molto migliore, esattamente quello che stavo cercando da così tanto tempo – Nacht

Problemi correlati