Получение сведений о нескольких учетных записях
Outlook поддерживает профиль, содержащий одну или несколько учетных записей, подключенных к серверу Exchange Server. В этом примере показано, как получать и отображать различные сведения о каждой учетной записи текущего профиля.
Пример
Следующий метод, EnumerateAccounts, отображает имя учетной записи, имя пользователя и SMTP-адрес для каждой учетной записи, определенной в текущем профиле. Если учетная запись подключена к серверу Exchange, EnumerateAccounts отображает имя и сведения о версии сервера Exchange. А если учетная запись находится в хранилище доставки, EnumerateAccounts отображает для учетной записи имя хранилища доставки по умолчанию.
EnumerateAccounts извлекает большую часть этих данных из объекта Account кроме случая, когда объект Account не содержит сведений об имени пользователя и его SMTP-адресе. В этом случае EnumerateAccounts использует объекты AddressEntry и ExchangeUser.
EnumerateAccounts получает объект AddressEntry, используя свойство AddressEntry объекта Recipient, получаемого из свойства CurrentUser. EnumerateAccounts получает объект ExchangeUser, используя метод GetExchangeUser() объекта AddressEntry.
Алгоритм для получения различных сведений с помощью объектов Account, AddressEntry и ExchangeUser:
Если объект Account содержит сведения об имени пользователя и его SMTP-адресе, используйте объект Account для отображения имени учетной записи, имени пользователя, SMTP-адреса, а также имени сервера Exchange и сведений о его версии, если учетная запись является учетной записью Exchange.
Если объект Account не содержит сведений об имени пользователя и его SMTP-адресе, выполните следующие действия:
Если учетная запись не является учетной записью Exchange, используйте объект AddressEntry для отображения имени пользователя и SMTP-адреса.
Если учетная запись является учетной записью Exchange, выполните следующие действия:
Используйте объект Account для отображения имени учетной записи, имени сервера Exchange и сведений о версии сервера Exchange.
Используйте объект ExchangeUser для отображения имени пользователя и SMTP-адреса.
Если вы используете Visual Studio для тестирования этого примера кода, сначала добавьте ссылку на компонент Microsoft Outlook 15.0 Object Library и задайте переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция using не должна находиться непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующей строке кода показано, как выполнить импорт и назначение в C#.
using Outlook = Microsoft.Office.Interop.Outlook;
private void EnumerateAccounts()
{
Outlook.Accounts accounts =
Application.Session.Accounts;
foreach (Outlook.Account account in accounts)
{
try
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("Account: " + account.DisplayName);
if (string.IsNullOrEmpty(account.SmtpAddress)
|| string.IsNullOrEmpty(account.UserName))
{
Outlook.AddressEntry oAE =
account.CurrentUser.AddressEntry
as Outlook.AddressEntry;
if (oAE.Type == "EX")
{
Outlook.ExchangeUser oEU =
oAE.GetExchangeUser()
as Outlook.ExchangeUser;
sb.AppendLine("UserName: " +
oEU.Name);
sb.AppendLine("SMTP: " +
oEU.PrimarySmtpAddress);
sb.AppendLine("Exchange Server: " +
account.ExchangeMailboxServerName);
sb.AppendLine("Exchange Server Version: " +
account.ExchangeMailboxServerVersion);
}
else
{
sb.AppendLine("UserName: " +
oAE.Name);
sb.AppendLine("SMTP: " +
oAE.Address);
}
}
else
{
sb.AppendLine("UserName: " +
account.UserName);
sb.AppendLine("SMTP: " +
account.SmtpAddress);
if(account.AccountType ==
Outlook.OlAccountType.olExchange)
{
sb.AppendLine("Exchange Server: " +
account.ExchangeMailboxServerName);
sb.AppendLine("Exchange Server Version: " +
account.ExchangeMailboxServerVersion);
}
}
if(account.DeliveryStore !=null)
{
sb.AppendLine("Delivery Store: " +
account.DeliveryStore.DisplayName);
}
sb.AppendLine("---------------------------------");
Debug.Write(sb.ToString());
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
}