Obtener información sobre múltiples cuentas
Outlook admite un perfil que contenga una o más cuentas conectadas a un servidor Exchange. En este ejemplo se muestra cómo obtener y mostrar información diversa sobre cada cuenta del perfil actual.
Ejemplo
El método siguiente, EnumerateAccounts, muestra el nombre de cuenta, el nombre de usuario y la dirección de protocolo simple de transferencia de correo (SMTP) para cada cuenta definida en el perfil actual. Si la cuenta está conectada a un servidor Exchange, EnumerateAccounts muestra el nombre de dicho servidor y la información de la versión. Además, si la cuenta reside en un almacén de entrega, EnumerateAccounts muestra el nombre del almacén de entrega predeterminado para la cuenta.
EnumerateAccounts tiene acceso a la mayoría de esta información desde el objeto Account, salvo cuando el objeto Account no contiene información sobre el nombre de usuario y la dirección SMTP. En ese caso, EnumerateAccounts usa los objetos AddressEntry y ExchangeUser.
EnumerateAccounts obtiene el objeto AddressEntry mediante el uso de la propiedad AddressEntry del objeto Recipient obtenido de la propiedad CurrentUser. EnumerateAccounts obtiene el objeto ExchangeUser mediante el uso del método GetExchangeUser() del objeto AddressEntry.
A continuación, se muestra el algoritmo para obtener diferente información mediante los objetos Account, AddressEntry y ExchangeUser:
Si el objeto Account contiene información sobre el nombre de usuario y la dirección SMTP, use el objeto Account para mostrar el nombre de la cuenta, el nombre de usuario, la dirección SMTP y el nombre del servidor Exchange y la información de la versión si la cuenta es una cuenta de Exchange.
Si el objeto Account no contiene información sobre el nombre de usuario y la dirección SMTP, haga lo siguiente:
Si la cuenta no es una cuenta de Exchange, use el objeto AddressEntry para mostrar el nombre de usuario y la dirección SMTP.
Si la cuenta es una cuenta de Exchange, haga lo siguiente:
Use el objeto Account para mostrar el nombre de cuenta, el nombre del servidor Exchange e información de versión de Exchange.
Use el objeto ExchangeUser para mostrar el nombre de usuario y la dirección SMTP.
Si usa Visual Studio para probar este ejemplo de código, primero debe agregar una referencia al componente de la biblioteca de objetos de Microsoft Outlook 15.0 y especificar la variable de Outlook al importar el espacio de nombres Microsoft.Office.Interop.Outlook. La instrucción using no debe producirse directamente antes de las funciones en el ejemplo de código, pero debe agregarse antes de la declaración de clase pública. La siguiente línea de código muestra cómo realizar la importación y la asignación en 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);
}
}
}