Получил адрес электронной почты от аутентифицированного пользователя Exchange - PullRequest
0 голосов
/ 03 мая 2020

В надстройке 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;
}

Мои вопросы:

  1. Могу ли я полагаться на функцию GetExchangeUser () для получения сведений о пользователе, прошедшем проверку подлинности Exchange? Я прочитал пост здесь , указывающий, что это может быть проблемой.
  2. Есть ли лучший способ проверить, прошел ли пользователь аутентификацию в среде обмена? Будет ли свойство ExchangeConnectionMode лучшим способом?
  3. Если я полагаюсь на свойство PropertyAccessor, насколько безопасно это будет для предотвращения подделки чужого адреса электронной почты?

Ссылки:

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Кажется, вам просто нужно получить 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-адрес отправителя почтового сообщения для получения дополнительной информации.

1 голос
/ 03 мая 2020

Вы можете быть уверены, что пользователь был аутентифицирован в какой-то предыдущий момент, по крайней мере, когда профиль был настроен.

...