Имперсонация – зачем и как?

Если Вы хотите записать студентам событие в календарь или показать количество непрочитанных сообщений в почтовом ящике Outlook Live пользователю, вошедшему на учебный портал, то совершенно не обязательно знать его пароль, чтобы получить данные из почтового ящика! Достаточно воспользоваться функцией имперсонации.

Для того, чтобы обеспечить такую возможность, Вам необходимо:

1. Настроить возможность имперсонации для идентификатора администратора. 

New-ManagementRoleAssignment -Name EWSadmin -Role ApplicationImpersonation -User ewsadmin@example.com

Подробнее: https://help.outlook.com/ru-ru/140/dd207272.aspx?ref=search

2. Загрузить Exchange Web Services Application Program Interface (EWS API) и установить на сервер с порталом

https://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=e8f38dd1-f123-4a16-b4c8-584d1f84af48

3. Сослаться в коде на библиотеку

using Microsoft.Exchange.WebServices.Data;

4. Создать код имперсонации (можно выделить в отдельный метод или функцию):

string ewsAdmin = “ ewsadmin@example.com ”; // пользователь с правами имперсонации

string ewsPassword = “Pa$$w0rd”; // пароль пользователя

string memberNameIn = “ user@example.com ”; // пользователь, для которого нужно получить/изменить информацию

            ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);

            service.Credentials = new WebCredentials(ewsAdmin, ewsPassword);

            service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, memberNameIn);

            service.Url = new Uri("https://pod51002.outlook.com/ews/exchange.asmx");

service.PreAuthenticate = true;

5. Добавить код для выполнения функций, например:

Создание события в календаре:

Appointment appointment = new Appointment(service);

appointment.Subject = “Демонстрационное событие”;

appointment.Body = new MessageBody();

appointment.Body.Text = “Текст события”;

appointment.Body.BodyType = (BodyType)Enum.Parse(typeof(BodyType), “text”);

appointment.Location = “Офис 210”;           

appointment.Start = “2009-09-30T12:30:00”;

appointment.End = “2009-09-30T15:30:00”;

appointment.Save();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отображение прочитанных / непрочитанных сообщений:

Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox); // Подключение к папке “Входящие”

Response.Write("Всего писем: " + inbox.TotalCount + ". Непрочтенных: " + inbox.UnreadCount); // Вывод сообщений

 

 

 

Вот и все! Студенты постоянно в курсе последних событий и наличия непрочтенных сообщений в своем ящике!

Дополнительная информация про EWS API: https://mamichev.spaces.live.com/blog/cns!DAD805F3381EED7B!2389.entry .