In einer Lösung versenden wir Emails und Kalendereinträge über die Webservices von Exchange. Mithilfe der Lösung können mittels einer Liste im Sharepoint Kalendereinträge bei verschiedenen Personen erstellt werden. Leider wurde als Organisierer der Kalendereinträge im Outlook immer der  ServiceAccount eingetragen mit dem der Exchange Webservice aufgerufen wurde. Außerdem war es nicht möglich den Organisierer einfach auf eine bestimmte Person zu setzen.

Nachdem ich mich etwas tiefer in die Thematik eingearbeitet hatte fand ich heraus, dass das Umsetzen des Organisierers mit den Exchange Webservices nur über den Kontext möglich ist. Das heißt, nur der Benutzer der den Webservice aufruft kann für seinen Kalender Einträge erstellen. Eine weitere Möglichkeit ist Delegation und Impersonierung.

Bei Delegation kann ein Benutzer auf dem Kalender eines anderen Benutzers Einträge erstellen. Dann erscheint im Kalendereintrag “Kalendereintrag im Auftrag von … erstellt”. Bei Impersonierung kann der Benutzer Kalendereinträge erstellen ohne dass in der Oberfläche etwas sichtbar ist. Dies war also genau was ich suchte.

Im Code benutzen Sie die Impersonierung in folgender Weise:

ExchangeService service = ConnectToExchange(exchangeWebServiceUrl);
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, fromAddress);

Appointment appointment = new Appointment(service);
appointment.Subject = subject;
appointment.Body = body;
appointment.Body.BodyType = BodyType.HTML;
appointment.Start = start;
appointment.End = end;
appointment.Location = location;

foreach (var email in attendees)
{
      appointment.RequiredAttendees.Add(email);
}

appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy);

Wie Sie sehen benutzt man einfach die Emailadresse des Nutzers für den man sich impersonieren möchte. Jetzt folgt noch eine administrative Hürde. Wäre es so einfach sich zu impersonieren könnte jeder Emails und Kalendereinträge als jemand anderer schreiben (gut für die Urlaubsplanung!). Die administrative Hürde besteht darin, dass der Serviceaccount Berechtigungen erhält um sich zu impersonieren.

Nach folgendem Artikel (http://msdn.microsoft.com/en-us/library/bb204095(EXCHG.140).aspx) benötigt man nur folgendes Cmdlet:

New-ManagementRoleAssignment Name:impersonationAssignmentName Role:ApplicationImpersonation User:serviceAccount 

Für Tests kann man die Berechtigungen auch auf bestimmte Nutzer einschränken. 
Beispiel:

New-ManagementScope -Name:NameDesScopes -RecipientRestrictionFilter: {SAMAccountname -eq "MaxMustermann"}
New-ManagementRoleAssignment Name:MRAName Role:ApplicationImpersonation User:ServiceAccount CustomRecipientWriteScope:NameDesScopes

Anschließend können über einen Serviceaccount Emails und Kalendereinträge über den Exchange erstellt werden.

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.