11

Oturum açmış olan kullanıcının dışındaki klasörlerin ve diğer Exchange hesaplarının öğelerine erişme olasılığı var mı?Exchange Web Hizmetleri Yönetilen API: Diğer kullanıcı öğelerine erişme

Bunu Exchange Web Services Managed API aracılığıyla yapabilir miyim?

+0

EWS'yi doğrudan kullanıyor musunuz veya EWS Managed API aracılığıyla mı kullanıyorsunuz? –

+0

@Alfred Myers EWS Managed API'sini kullanıyorum – Luke

cevap

14

Evet, ancak diğer kullanıcının parolasını bilmeniz veya bu kimlik bilgilerini (NetworkCredential nesnesi) bazı şekillerde yakalamanız gerekir. size kod tipik ilk satırları

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

yüzden şimdiki kullanıcı olarak diğeri hesapla Exchange Server Web Hizmetleri erişebilirsiniz olabilir. Daha fazla bilgi için ExchangeService object açıklamasına bakın.

Eğer bir kullanıcı iseniz kullanıcı impersonation by SMTP address yapabilirsiniz.

+0

@Alfred Myers & @ user457261: Hiç yorum yazmadınız. İhtiyacınız olan şeyi yazdığım bilgiler mi? – Oleg

+0

Cevabınız için teşekkürler, ancak her şifreyi bilmeden bir yol arıyordum. Tüm hesaplara erişebilen bir süper kullanıcı kullanmak gibi. – Luke

+2

@Luke: Cevabımın son cümleleri bunu nasıl yapacağını açıklıyor. Bir "superadmin" olarak, herhangi bir kullanıcıyı SMTP adresine sadece kendi şifresi hakkında herhangi bir bilgi sahibi olmadan taklit edebilirsiniz. Http://msdn.microsoft.com/en-us/library/dd633680(EXCHG.80).aspx bir kez daha bakın. – Oleg

0

Her kullanıcı için giriş yapmak yerine kimliğe bürünme kullanılmasını öneririm. Kimliğe bürünme yoluyla kullanıcıları taklit edebilirsiniz. Tam erişim gibi değil. Tam erişim üzerinde davranıyor, kimliğe bürünme gibi davranıyor.

Kimliğe bürünme öncesinde, x kullanıcı adları ve parolaları yerine bir kullanıcı adı ve parolanız vardır.

Bu yol gibi bürünme kullanabilirsiniz:

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

kullanıcı başkasına erişim yetkisi olduğunda, diğer kullanıcının klasöre erişebilir. Örneğin: Kişi A, kimliğine bürünecek ve Kişi B

4

'a erişebilir. Parolanın yanlış olduğunu ve kimliğe bürünme (yanlış) kullanıldığını bilmek yanlıştır.

İşte bunu nasıl yapıyorsunuz.

 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

Bu çok daha iyi bir cevap, tam aradığım şey çok uzun zamandır – Nacht

İlgili konular