Поделиться через


Получение информации для нескольких учетных записей

Microsoft Outlook поддерживает профиль, содержащий одну или несколько учетных записей, подключенных к серверу Microsoft Exchange Server. В этом разделе показано, как получить и отобразить прочие сведения о каждой учетной записи в текущем профиле.

В следующем методе EnumerateAccountsотображается имя учетной записи, имя пользователя и SMTP-адрес для каждой учетной записи, определенной в текущем профиле. Если учетная запись подключена к серверу Exchange Server, EnumerateAccounts отображает имя и версию сервера Exchange. Если учетная запись находится в хранилище доставки, EnumerateAccounts отображается имя хранилища доставки по умолчанию для учетной записи.

EnumerateAccounts извлекает большую часть этих данных из объекта Account кроме случая, когда объект Account не содержит сведений об имени пользователя и его SMTP-адресе. В этом случае EnumerateAccounts использует объекты AddressEntry и ExchangeUser . EnumerateAccounts получает объект AddressEntry с помощью свойства AddressEntry объекта Recipient , полученного из свойства Account.CurrentUser . EnumerateAccounts получает объект ExchangeUser с помощью метода GetExchangeUser объекта AddressEntry . Ниже приведен алгоритм получения различных данных с помощью объектов Account, AddressEntry и ExchangeUser:

  • Если объект Account содержит сведения об имени пользователя и его SMTP-адресе, используйте объект Account для отображения имени учетной записи, имени пользователя, SMTP-адреса, а также имени сервера Exchange и сведений о его версии, если учетная запись является учетной записью Exchange.

  • В противном случае объект Account не содержит сведения об имени пользователя и SMTP-адресе и выполните следующие действия:

    • Если учетная запись не является учетной записью Exchange, используйте объект AddressEntry для отображения имени пользователя и SMTP-адреса.

    • В противном случае учетная запись является учетной записью Exchange и выполните следующие действия:

      1. Используйте объект Account для отображения имени учетной записи, имени сервера Exchange и сведений о версии сервера Exchange.

      2. Используйте объект ExchangeUser для отображения имени пользователя и его SMTP-адреса.

Следующий пример управляемого кода написан на C#. Для запуска примера управляемого кода для .NET Framework, который вызывает модель COM, необходимо использовать сборку взаимодействия, которая определяет и сопоставляет управляемые интерфейсы с объектами COM в библиотеке типов объектной модели. Для Outlook можно использовать Visual Studio и первичную сборку взаимодействия Outlook (PIA). Перед запуском примеров управляемого кода для Outlook 2013 убедитесь, что вы установили Outlook 2013 PIA и добавили ссылку на компонент Microsoft Outlook 15.0 Object Library в Visual Studio.

В классе надстройки ThisAddIn Outlook следует использовать следующий код (с помощью средств разработчика Office для Visual Studio). Объект Application в коде должен быть доверенным объектом Application Outlook, предоставленным объектом ThisAddIn.Globals. Дополнительные сведения об использовании Outlook PIA для разработки управляемых решений Outlook см. в статье Справочник по основной сборке взаимодействия Outlook на веб-сайте MSDN.

private void EnumerateAccounts() 
{ 
    Outlook.Accounts accounts = 
        Application.Session.Accounts; 
 
    // Enumerate each account defined in the current profile. 
    foreach (Outlook.Account account in accounts) 
    { 
        try 
        { 
            StringBuilder sb = new StringBuilder(); 
            sb.AppendLine("Account: " + account.DisplayName); 
 
            // If the account does not contain the SMTP address or 
            // user name, use the AddressEntry and ExchangeUser objects. 
            if (string.IsNullOrEmpty(account.SmtpAddress) 
                || string.IsNullOrEmpty(account.UserName)) 
            { 
                Outlook.AddressEntry oAE = 
                    account.CurrentUser.AddressEntry 
                    as Outlook.AddressEntry; 
 
                // If the account is an Exchange account, 
                // display also the Exchange server name and version. 
                if (oAE.Type == "EX") 
                { 
                    Outlook.ExchangeUser oEU = 
                        oAE.GetExchangeUser() 
                        as Outlook.ExchangeUser; 
  
                    // Use ExchangeUser object to display user name 
                    // and SMTP address. 
                    sb.AppendLine("UserName: " + 
                        oEU.Name); 
                    sb.AppendLine("SMTP: " + 
                        oEU.PrimarySmtpAddress); 
 
                    // Use Account object to display the Exchange 
                    // server name and version information. 
                    sb.AppendLine("Exchange Server: " + 
                        account.ExchangeMailboxServerName); 
                    sb.AppendLine("Exchange Server Version: " + 
                        account.ExchangeMailboxServerVersion);  
                } 
                // The account is not connected to an Exchange 
                // Server, use the AddressEntry object to display only  
                // the user name and SMTP address. 
                else 
                { 
                    sb.AppendLine("UserName: " + 
                        oAE.Name); 
                    sb.AppendLine("SMTP: " + 
                        oAE.Address); 
                } 
            } 
            // The account contains SMTP address and 
            // user name, then the Account object is sufficient.  
            else 
            { 
                sb.AppendLine("UserName: " + 
                    account.UserName); 
                sb.AppendLine("SMTP: " + 
                    account.SmtpAddress); 
 
                // If the account is an Exchange account, 
                // display also the Exchange server name and version. 
                if(account.AccountType ==  
                    Outlook.OlAccountType.olExchange) 
                { 
                    sb.AppendLine("Exchange Server: " + 
                        account.ExchangeMailboxServerName); 
                    sb.AppendLine("Exchange Server Version: " + 
                        account.ExchangeMailboxServerVersion);  
                } 
            } 
 
            // If the account is connected to a delivery store, 
            // display the store name as well. 
            if(account.DeliveryStore !=null) 
            { 
                sb.AppendLine("Delivery Store: " + 
                    account.DeliveryStore.DisplayName); 
            } 
            sb.AppendLine("---------------------------------"); 
            Debug.Write(sb.ToString()); 
        } 
        catch (Exception ex) 
        { 
            Debug.WriteLine(ex.Message); 
        } 
    } 
} 

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.