11

Est-il possible d'accéder aux dossiers et éléments d'autres comptes Exchange autres que celui de l'utilisateur connecté? Puis-je le faire via l'API managée des services Web Exchange?API Web Services Exchange: accès aux autres éléments

+0

Utilisez-vous directement le serveur Web intégré ou l'utilisez-vous via EWS Managed API? –

+0

@Alfred Myers J'utilise EWS Managed API – Luke

Répondre

14

Oui, il est possible, mais vous devez connaître le mot de passe de l'autre utilisateur ou saisir d'une certaine manière ces informations d'identification (objet NetworkCredential). Les lignes typiques de votre code premières pourraient être

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

vous pouvez accéder à des services Web si Exchange Server avec le compte qui est autre que l'utilisateur actuel. Voir description de ExchangeService object pour plus d'informations. Si vous êtes un administrateur, vous pouvez rendre l'utilisateur impersonation by SMTP address.

+0

@Alfred Myers & @ user457261: Vous n'avez écrit aucun commentaire. Est-ce que les informations que j'ai écrites sont ce dont vous avez besoin? – Oleg

+0

Merci pour votre réponse, mais je cherchais un moyen sans avoir à connaître tous les mots de passe. Comme utiliser un super-utilisateur qui peut accéder à tous les comptes. – Luke

+2

@Luke: Les dernières phrases de ma réponse décrivent comment faire cela. En tant que "superadmin", vous pouvez usurper l'identité d'un utilisateur par adresse SMTP sans avoir d'informations sur son mot de passe. Regardez http://msdn.microsoft.com/en-us/library/dd633680(EXCHG.80).aspx une fois de plus. – Oleg

0

Je suggère d'utiliser l'emprunt d'identité au lieu de la connexion pour chaque utilisateur. Via l'usurpation d'identité, vous pouvez usurper l'identité des utilisateurs. Ce n'est pas la même chose comme un accès complet. L'accès complet est le comportement de, l'usurpation d'identité est agir comme.

Un pré usurpation d'identité est que vous avez un nom d'utilisateur et un mot de passe au lieu d'avoir des noms d'utilisateur x et des mots de passe.

Vous pouvez utiliser l'usurpation d'identité comme la façon suivante:

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

lorsqu'un utilisateur a déléguer l'accès à quelqu'un d'autre, vous pouvez accéder au dossier de l'autre utilisateur. Par exemple: La personne A sera usurpée et pourra accéder à la personne B

4

Connaître le mot de passe est incorrect et utiliser l'usurpation d'identité (de nos jours) est erroné.

Voici comment vous le faites.

 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

C'est une bien meilleure réponse, exactement ce que je cherchais depuis si longtemps – Nacht

Questions connexes