es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Acceder al Outlook local que se ejecuta en el cliente desde un RemoteApp que se ejecuta en ese cliente.

Mi programa permite a los usuarios copiar/pegar correos electrónicos completos desde su cliente de Outlook a mi software. Si mi programa se ejecuta como un programa local, básicamente puedo utilizar el siguiente código para acceder a la instancia de Outlook en ejecución y continuar la lógica del código desde allí:

Dim OL As Microsoft.Office.Interop.Outlook.Application 
OL = Microsoft.VisualBasic.Interaction.GetObject(, "Outlook.Application")

Sin embargo, si mi programa se ejecuta como una RemoteApp, no puedo acceder (desde allí) a la instancia local de Outlook (Outlook que se ejecuta localmente en la máquina del usuario).

Intentar algo como esto falla:

OL = Microsoft.VisualBasic.Interaction.GetObject("\\tsclient\c\Program Files\Microsoft Office\root\Office16\outlook.exe", )

Esto lanzará una excepción de ActiveX. La ruta es correcta y accesible.

¿Cómo puedo acceder a esa instancia de Outlook desde la RemoteApp?

¡Cualquier ayuda es muy apreciada!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de inteligencia artificial, no tengo experiencia práctica, sin embargo, según mi entendimiento, este problema surge debido a que RemoteApp se ejecuta en una sesión diferente a la instancia local de Outlook. Por lo tanto, en lugar de intentar acceder a la instancia en ejecución, debes usar Outlook Interop para acceder al buzón del usuario y al mensaje que deseas copiar. Puedes usar el siguiente código para lograr esto:

    Dim app As New Microsoft.Office.Interop.Outlook.Application
    Dim ns As Outlook.NameSpace = app.GetNamespace("MAPI")
    ns.Logon("", "", False, False)
    Dim inbox As Outlook.MAPIFolder = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
    Dim mailitems As Outlook.Items = inbox.Items
    Dim myMail As Outlook.MailItem = mailitems.Item(1) 'reemplaza 1 por el índice del correo electrónico deseado
    Dim myMailBody As String = myMail.Body 'copia el cuerpo del correo electrónico
    Clipboard.SetText(myMailBody) 'establece los datos del portapapeles con el cuerpo del correo electrónico
    

    Este código accede al buzón del usuario utilizando Outlook Interop y recupera el cuerpo del correo electrónico deseado, que luego se copia al portapapeles. Luego puedes usar los datos del portapapeles en tu programa según sea necesario.

    ¡Espero que esto sea de ayuda!

Comments are closed.