Obtener información de varias cuentas
Microsoft Outlook admite un perfil que contiene una o más cuentas conectadas a un servidor Microsoft Exchange. En este tema se muestra cómo obtener y mostrar información miscelánea sobre cada cuenta del perfil actual.
El método siguiente, EnumerateAccounts
, muestra el nombre de cuenta, el nombre de usuario y la dirección del 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 del servidor de Exchange y la información de 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
obtiene acceso a la mayor parte de esta información desde el objeto Account , excepto 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 la propiedad AddressEntry del objeto Recipient obtenido de la propiedad Account.CurrentUser . EnumerateAccounts
obtiene el objeto ExchangeUser mediante el uso del método GetExchangeUser del objeto AddressEntry. El siguiente algoritmo se usa para obtener diferentes tipos de información mediante el uso de 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.
De lo contrario, el objeto Account no contiene información sobre el nombre de usuario y la dirección SMTP, y debe proceder de la siguiente manera:
Si la cuenta no es una cuenta de Exchange, use el objeto AddressEntry para mostrar el nombre de usuario y la dirección SMTP.
De lo contrario, la cuenta es una cuenta de Exchange, y debe proceder de la siguiente manera:
Use el objeto Account para mostrar el nombre de cuenta, el nombre del servidor Exchange y la información de la versión de Exchange.
Use el objeto ExchangeUser para mostrar el nombre de usuario y la dirección SMTP.
El siguiente ejemplo de código administrado está escrito en C#. Para ejecutar un ejemplo de código administrado de .NET Framework que necesita llamar un modelo de objetos componentes (COM), debe utilizar un ensamblado de interoperabilidad que defina y asigne interfaces administradas a los objetos COM de la biblioteca de tipos de modelos de objetos. Para Outlook, puede utilizar Visual Studio y el ensamblado de interoperabilidad primario (PIA) de Outlook. Antes de ejecutar ejemplos de código administrado para Outlook 2013, compruebe que tiene el PIA de Outlook 2013 instalado y que ha añadido una referencia al componente biblioteca de objetos de Microsoft Outlook 15.0 en Visual Studio.
Debe usar el código siguiente en la ThisAddIn
clase de un complemento de Outlook (con Office Developer Tools para Visual Studio). El objeto Application del código debe ser un objeto Application de Outlook de confianza proporcionado por ThisAddIn.Globals
. Si desea más información sobre el uso del PIA de Outlook para desarrollar soluciones de Outlook administradas, consulte Outlook 2013 Primary Interop Assembly Reference en 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);
}
}
}
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.