Compartir a través de


Crear un elemento que se pueda enviar para una cuenta específica basada en la carpeta actual (Outlook)

Cuando se usa el método CreateItem del objeto Application para crear un elemento de Microsoft Outlook, el elemento se crea para la cuenta principal de esa sesión. En una sesión donde hay definidas varias cuentas en el perfil, puede crear un elemento para una cuenta de IMAP, POP o Microsoft Exchange específica. Si hay varias cuentas en el perfil actual y crea un elemento que se pueda enviar en la interfaz de usuario, por ejemplo, al hacer clic en Nuevo correo electrónico o Nueva reunión, un inspector muestra un nuevo elemento de correo o convocatoria de reunión en el modo de redacción y, a continuación, puede seleccionar la cuenta desde la que desea enviar el elemento. En este tema se muestra cómo crear un elemento que se pueda enviar y enviarlo con una cuenta de envío específica mediante programación. El tema tiene dos ejemplos de código que muestran cómo crear un MailItem y un AppointmentItem para una cuenta específica determinada por la carpeta actual en el explorador activo.

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.

El primer método siguiente, CreateMailItemFromAccount, crea un Objeto MailItem para una cuenta específica y lo muestra en modo de redacción; el almacén de entrega predeterminado de la cuenta específica es el mismo que el almacén de la carpeta que se muestra en el explorador activo. El usuario actual de la cuenta está configurado como el remitente. CreateMailItemFromAccount identifica la cuenta adecuada al hacer coincidir el almacén de la carpeta actual (obtenido de la propiedad Folder.Store ) con el almacén de entrega predeterminado para cada cuenta (obtenido con la propiedad Account.DeliveryStore ) que está definido en la colección Accounts para la sesión. CreateMailItemFromAccount luego crea el objeto MailItem. Para asociar el elemento a la cuenta, CreateMailItemFromAccount asigna al usuario de la cuenta como remitente del elemento estableciendo el objeto AddressEntry del usuario de la cuenta en la propiedad Sender del objeto MailItem. El paso importante es la asignación de la propiedad Sender, porque, de lo contrario, el objeto MailItem se crea para la cuenta principal. Al final del método, CreateMailItemFromAccount muestra el objeto MailItem. Recuerde que si la carpeta actual no está en el almacén de entrega, CreateMailItemFromAccount simplemente crea el objeto MailItem para la cuenta principal de la sesión.

private void CreateMailItemFromAccount() 
{ 
    Outlook.AddressEntry addrEntry = null; 
 
    // Get the store for the current folder. 
    Outlook.Folder folder = 
        Application.ActiveExplorer().CurrentFolder  
        as Outlook.Folder; 
    Outlook.Store store = folder.Store; 
     
    Outlook.Accounts accounts = 
        Application.Session.Accounts; 
 
    // Match the delivery store of each account with the  
    // store for the current folder. 
    foreach (Outlook.Account account in accounts) 
    { 
        if (account.DeliveryStore.StoreID ==  
            store.StoreID) 
        { 
            addrEntry = 
                account.CurrentUser.AddressEntry; 
            break; 
        } 
    } 
 
    // Create MailItem. Account is either the primary 
    // account or the account with a delivery store 
    // that matches the store for the current folder. 
    Outlook.MailItem mail = 
        Application.CreateItem( 
        Outlook.OlItemType.olMailItem) 
        as Outlook.MailItem; 
 
    if (addrEntry != null) 
    { 
        //Set Sender property. 
        mail.Sender = addrEntry; 
        mail.Display(false); 
    } 
} 

El siguiente método, CreateMeetingRequestFromAccount, es similar a CreateMailItemFromAccount , salvo que crea un objeto AppointmentItem en lugar de un MailItem y asocia appointmentItem a la cuenta mediante su propiedad SendUsingAccount . CreateMeetingRequestFromAccount crea un objeto AppointmentItem en la carpeta Calendar de una cuenta cuyo almacén de entrega predeterminado es el mismo que el almacén de la carpeta que se muestra en el explorador activo. CreateMeetingRequestFromAccount identifica la cuenta adecuada al hacer coincidir el almacén de la carpeta actual (obtenido de la propiedad Folder.Store ) con el almacén de entrega predeterminado para cada cuenta (obtenido con la propiedad Account.DeliveryStore ) que está definido en la colección Accounts para la sesión. CreateMeetingRequestFromAccount luego crea el objeto AppointmentItem. Para asociar el elemento a la cuenta, CreateMeetingRequestFromAccount asigna esa cuenta como cuenta de envío del elemento estableciendo el objeto Account en la propiedad SendUsingAccount del objeto AppointmentItem. La asignación de la propiedad SendUsingAccount es el paso importante, porque, de lo contrario, el objeto AppointmentItem se crea para la cuenta principal. Al final de este método, CreateMeetingRequestFromAccount muestra el objeto AppointmentItem. Recuerde que si la carpeta actual no está en un almacén de entrega, CreateMeetingRequestFromAccount simplemente crea el objeto AppointmentItem para la cuenta principal de la sesión.

private void CreateMeetingRequestFromAccount() 
{ 
    Outlook.Account acct = null; 
 
    // Get the store for the current folder. 
    Outlook.Folder folder = 
        Application.ActiveExplorer().CurrentFolder 
        as Outlook.Folder; 
    Outlook.Store store = folder.Store; 
 
    Outlook.Accounts accounts = 
        Application.Session.Accounts; 
 
    // Match the delivery store of each account with the  
    // store for the current folder. 
    foreach (Outlook.Account account in accounts) 
    { 
        if (account.DeliveryStore.StoreID == 
            store.StoreID) 
        { 
            acct = account; 
            break; 
        } 
    } 
  
    // Create AppointmentItem. Account is either the primary 
    // account or the account with a delivery store 
    // that matches the store for the current folder. 
    Outlook.AppointmentItem appt = 
        Application.CreateItem( 
        Outlook.OlItemType.olAppointmentItem) 
        as Outlook.AppointmentItem; 
 
    appt.MeetingStatus =  
        Outlook.OlMeetingStatus.olMeeting; 
    if (acct != null) 
    { 
        //Set SendUsingAccount property. 
        appt.SendUsingAccount=acct; 
        appt.Display(false); 
    } 
} 

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.