В надстройке VSTO я пытаюсь получить адрес электронной почты пользователя, подключенного к Outlook. По соображениям безопасности я хотел бы убедиться, что пользователь прошел проверку подлинности на сервере Exchange до использования адреса электронной почты. Аутентификация может быть прямой, когда внутри домена или снаружи используется Outlook Anywhere или аналогичные механизмы аутентификации. Пока у меня есть следующий код:
string authUserEmail = ""; string notAuthUserEmail = ""; AddressEntry currentUserAddressEntry = Application.Session.CurrentUser.AddressEntry; if (currentUserAddressEntry.Type.Contains("Exchange")) { ExchangeUser currentExUser = currentUserAddressEntry.GetExchangeUser(); if(currentExUser != null) authUserEmail = currentExUser.PrimarySmtpAddress; } if (authUserEmail == "") { string PR_SMTP_ADDRESS = @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E"; notAuthUserEmail = currentUserAddressEntry.PropertyAccessor.GetProperty(PR_SMTP_ADDRESS) as string; }
Мои вопросы:
Ссылки:
Кажется, вам просто нужно получить SMTP-адрес электронной почты текущего пользователя в Outlook.
private string GetUserSMTPAddress() { string PR_SMTP_ADDRESS = @"http://schemas.microsoft.com/mapi/proptag/0x39FE001E"; Outlook.AddressEntry sender = Application.Session.CurrentUser.AddressEntry; if (sender != null) { //Now we have an AddressEntry representing the Sender if (sender.AddressEntryUserType == Outlook.OlAddressEntryUserType. olExchangeUserAddressEntry || sender.AddressEntryUserType == Outlook.OlAddressEntryUserType. olExchangeRemoteUserAddressEntry) { //Use the ExchangeUser object PrimarySMTPAddress Outlook.ExchangeUser exchUser = sender.GetExchangeUser(); if (exchUser != null) { return exchUser.PrimarySmtpAddress; } else { return null; } } else { return sender.PropertyAccessor.GetProperty( PR_SMTP_ADDRESS) as string; } } else { return null; } }
См. Получить SMTP-адрес отправителя почтового сообщения для получения дополнительной информации.
Вы можете быть уверены, что пользователь был аутентифицирован в какой-то предыдущий момент, по крайней мере, когда профиль был настроен.