Respuesta

14

Sí, es posible, pero debe conocer la contraseña del otro usuario o tomar de alguna manera estas credenciales (objeto NetworkCredential). Las primeras líneas típicas de código que podrían ser

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

para que pueda acceder a los servicios web de Exchange Server con la cuenta que es otra medida que el usuario actual. Consulte la descripción de ExchangeService object para obtener más información.

Si es administrador puede hacer que el usuario impersonation by SMTP address.

+0

@Alfred Myers & @ user457261: No escribió ningún comentario. ¿La información que escribí es lo que necesitas? – Oleg

+0

Gracias por su respuesta, pero estaba buscando una forma sin tener que saber cada contraseña. Como usar un superusuario que puede acceder a todas las cuentas. – Luke

+2

@Luke: Las últimas frases de mi respuesta describen cómo hacer esto. Como "superadmin", puede suplantar a cualquier usuario por medio de la dirección SMTP sin tener ninguna información sobre su contraseña. Mire http://msdn.microsoft.com/en-us/library/dd633680(EXCHG.80).aspx una vez más. – Oleg

0

Sugiero usar la suplantación en lugar de iniciar sesión para cada usuario. A través de la suplantación, puede suplantar a los usuarios. No es lo mismo que acceso completo. El acceso completo está en el comportamiento de, la suplantación es actuar como.

Un pre de suplantación es que tiene un nombre de usuario y contraseña en lugar de tener x nombres de usuario y contraseñas.

Se puede utilizar como suplantación de esta manera:

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

cuando un usuario tiene acceso delegado a otra persona, puede acceder a la carpeta del otro usuario. Por ejemplo: la persona A será suplantada y podrá acceder a la persona B

4

Conocer la contraseña es incorrecta y usar la suplantación (actualmente) es incorrecta.

Así es como lo haces.

 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

Esta es una respuesta mucho mejor, exactamente lo que he estado buscando durante tanto tiempo – Nacht

Cuestiones relacionadas