scripts script reglas programar programacion para macro leer ejecutar desde crear correo vbscript outlook security-warning

vbscript - reglas - scripts en outlook



¿Cómo evitar Outlook Security Alert al enviar mensajes de Outlook desde VBScript? (2)

Tengo esta situación:

  • El código debe estar en VBScript (fuera de mi control)
  • No se pueden deshabilitar las restricciones de acceso programático en las preferencias de Outlook (política de grupo, no administración, y Windows no reconoce el antivirus válido que está instalado)
  • No se puede usar SMTP porque no está permitido.

Pensé que no habría forma de enviar un correo electrónico utilizando Outlook de una manera automática (en una caja desatendida iniciada como usuario con la pantalla bloqueada). Intenté muchos enfoques diferentes, pero siempre recibiría el mensaje de advertencia de seguridad. ¿Cómo puedo arreglar esto?

Ya he intentado todo en este útil sitio y eliminé cada opción de la siguiente manera:

Estrategias
Idealmente, las aplicaciones que automatizan Outlook deben evitar el código que desencadena estas solicitudes de seguridad.

Esto es exactamente lo que terminé haciendo (ver mi respuesta a continuación), y es por eso que todas las otras opciones en esa página son irrelevantes. Tomemos uno por uno:

Enviando mensajes
No es necesario utilizar objetos de Outlook en absoluto si su objetivo es simplemente crear y enviar un mensaje de correo electrónico. Microsoft proporciona el CDO para la biblioteca de Windows para crear y enviar mensajes con SMTP. El uso de esta biblioteca evita por completo Outlook y MAPI y no activa las indicaciones de seguridad. Para muestras de código, vea ...

SMTP. No vayas. No permitido por la política de red.

Use MAPI extendido en lugar de objetos de Outlook, MAPI simple o CDO 1.21 para todo el código que pueda generar avisos de seguridad.

La MAPI extendida puede funcionar, pero es extremadamente engorrosa y prolija e involucra un montón de código C / C ++ (que no está en el tema de esta pregunta, ver arriba), y parece ser imposible de usar sin pedirle al usuario su contraseña.

Use una biblioteca de terceros (Redemption o MAPI33) para todo el código que pueda generar avisos de seguridad. Este enfoque es más fácil que usar MAPI extendido, que tiene una curva de aprendizaje pronunciada y casi tan seguro. Estas bibliotecas también ofrecen características adicionales para ayudar con los proyectos de código de Outlook.

El problema con las bibliotecas de terceros es cuádruple: - Cuestan dinero; - Introducen problemas de licenciamiento, incluso si son gratuitos (algunas organizaciones requieren una amplia investigación por parte de los abogados antes de permitir que el software ingrese al ecosistema); - La mayoría de los entornos donde todo este problema es incluso una preocupación son aquellos en los que el usuario no puede deshabilitar las advertencias de acceso a programas en las opciones de Outlook. Hmm, ¿qué posibles casos serían esos? ¿Podría ser ... ambientes corporativos ? La adquisición de software en un entorno corporativo toma un tiempo excesivamente largo, hasta el punto de ser poco práctico, a menos que el ahorro en el costo de su uso supere varios millones de dólares. Pero hay muchas mejoras prácticas en el proceso que no producen un ahorro de costos tan alto, pero costaría más dinero y mano de obra adquirir el software de terceros que el ahorro total, si la adquisición de software es necesaria. - Los administradores de red pueden no confiar en que el software resida en un sistema, ya que podría utilizarse con fines maliciosos.

Implemente con su aplicación una herramienta para suprimir las indicaciones de seguridad.

Esto supone que la supresión de las indicaciones de OMG es necesaria, lo que, en mi caso, no es, simplemente enviar un correo electrónico simple (ver mi respuesta).

Para Outlook 2007, asegúrese de que la máquina esté ejecutando una aplicación antivirus actualizada y realice todas las codificaciones con los objetos de Outlook, evitando CDO 1.21 y el código MAPI simple.

El antivirus está actualizado, pero está completamente fuera de mi control cambiar su versión o proveedor, y Outlook no lo reconoce. Dice: "Estado del antivirus: inválido. Esta versión de Windows admite la detección antivirus, pero no se encontró ningún antivirus".

En el código de formulario personalizado de Outlook, el código VBA de Outlook y los complementos COM, deriva todos los objetos del objeto Outlook.Application proporcionado por VBA o la arquitectura de complemento. Por ejemplo, consulte el procedimiento de regla de ejemplo "ejecutar un script" de VBA a continuación.

Interesante, y posiblemente útil, pero no necesario. Esto crea una dependencia innecesaria en la configuración de una regla en Outlook para implementar el software, lo que complica la implementación.

Implemente configuraciones de seguridad de Outlook que "confíen" en ciertos complementos COM o que permitan que todas las aplicaciones tengan acceso ilimitado a ciertas funciones, como el acceso a las direcciones. En versiones anteriores a Outlook 2007, esto requiere Microsoft Exchange Server. Para Outlook 2007, consulte la sección sobre consideraciones específicas de la versión a continuación.

Es engorroso: se necesitaría acceso administrativo para instalar un complemento COM, y puede ser difícil obtener acceso administrativo en algunas organizaciones.

En un entorno corporativo donde Exchange es el servidor de correo electrónico, el acceso directo a los datos en el servidor está disponible a través de la API WebDAV que comienza con Exchange 2000 y, comenzando con Exchange 2007, a través de los servicios web de Exchange.

Inhabilitado en mi entorno, y probablemente otros.

En un entorno corporativo, el administrador puede optar por aflojar la seguridad de Outlook para algunos o todos los usuarios.

Claro, pero esto requiere comunicación / coordinación / cooperación con el equipo de la red. Si el acceso administrativo no está disponible para instalar un complemento COM, probablemente tampoco esté disponible para aflojar la política de grupo.


Este código funciona en mi sistema con Outlook 2010 para enviar un correo electrónico sin interacción del usuario. Es algo frágil, en eso, si el usuario está trabajando activamente en el sistema (escribiendo, haciendo clic) cuando se compone el correo, podría ocurrir que la entrada del usuario llegue a la ventana que aparece por una fracción de segundo, y interfiere con el envío del correo o añade caracteres extra desconocidos en el cuerpo del correo.

Siempre que el usuario en cuyo sistema esto se está ejecutando sea consciente de esto, y las posibles consecuencias de la interferencia falsa del teclado no sean críticas para el negocio, esta función es aceptable.

Importante: la clave de esta solución es que no llamamos al método MailItem.Send . Este es el método que desencadena la protección de acceso programático. En su lugar, activamos el acceso directo ALT + s , que de forma predeterminada, cuando una ventana de correo tiene foco en Outlook, presiona el botón "Enviar". Si tiene activada la solicitud de revisión ortográfica predeterminada, aparecerá un aviso adicional para la corrección ortográfica. Nuestra solución fue desactivar el aviso de corrección ortográfica, aunque estoy seguro de que podría agregar más SendKeys para hacer clic en él, ya que el aviso de corrección ortográfica no es un diálogo relacionado con la seguridad.

Una nota sobre UIPI (aislamiento de privilegios de interfaz de usuario):

Outlook 2010 se ejecuta como el usuario que inició sesión en el sistema, con un nivel de integridad medio. Los programas lanzados por el Explorador de Windows o iniciados como un elemento secundario o descendiente de un programa que se inició de forma similar también se lanzarán con un nivel de integridad Medio . UIPI no es efectivo para evitar la entrada de tipo "SendKeys", siempre que el usuario y la ID de sesión coincidan, y el nivel de integridad sea igual o superior. En mi entorno particular, el usuario y la ID de sesión son idénticos, y el nivel de integridad es el mismo para el proceso de host de VBScript y el proceso de Outlook. En su entorno, si alguna de estas condiciones es falsa, este código no funcionará. Tampoco se ha probado en versiones anteriores o posteriores de Office que la versión 2010.

Sub SendEmail_Outlook() Set WshShell = WScript.CreateObject("WScript.Shell") Set ol=CreateObject("Outlook.Application") Set Mail=ol.CreateItem(0) Mail.to= "[email protected]" Mail.Subject = "test" Mail.HTMLBody = "test" Mail.Display WshShell.SendKeys "%s" Set Mail = Nothing Set ol = Nothing End Sub SendEmail_Outlook

Además, aquí se muestra cómo hacer que esto funcione cuando se ejecuta VBScript desde el Programador de tareas de Windows. Simplemente marque la casilla representada por el óvalo rojo, "Ejecutar con los privilegios más altos", para que se ejecute con el nivel de integridad más alto posible sin elevación de UAC ("Medio" si no es una cuenta de administrador).


Algunas opciones:

  1. Software antivirus actualizado (Outlook no mostrará una solicitud en ese momento)
  2. MAPI extendido (C ++ o Delphi, no se aplica en caso de script VB). Sin embargo, puede utilizar un contenedor como Redención que usa MAPI extendido, pero se puede acceder desde cualquier idioma, incluido VBS.
  3. Un producto como ClickYes .

Vea http://www.outlookcode.com/article.aspx?id=52 para una discusión y una lista de opciones disponibles.