Automatización del nuevo modelo de objetos de Outlook: por qué el código de automatización antiguo deja de funcionar
🔍 WiseChecker

Automatización del nuevo modelo de objetos de Outlook: por qué el código de automatización antiguo deja de funcionar

Si tiene macros de VBA, complementos COM o scripts que automatizan tareas de Outlook como enviar correos electrónicos, leer elementos del calendario o manipular carpetas, es posible que este código deje de funcionar repentinamente después de actualizar al nuevo Outlook para Windows. La causa principal es un cambio arquitectónico fundamental: el nuevo Outlook reemplaza el modelo de objetos clásico basado en MAPI con una API basada en REST que no admite la mayoría de las interfaces de automatización heredadas. Este artículo explica por qué falla su código antiguo, qué métodos y propiedades del modelo de objetos se ven afectados y qué opciones de migración tiene para restaurar sus flujos de trabajo de automatización.

Puntos clave: por qué el nuevo Outlook rompe la automatización antigua

  • Complementos COM y macros de VBA que usan el modelo de objetos de Outlook: El nuevo Outlook no carga complementos COM clásicos ni ejecuta macros de VBA, lo que hace que todo el código que depende de los objetos Application, Namespace, Explorer e Inspector deje de funcionar.
  • Métodos basados en MAPI como GetSharedDefaultFolder, CreateItem y Send: Estos métodos dependen del subsistema MAPI, que no está presente en el nuevo Outlook. Las llamadas a estos métodos devuelven el error 0x80040154 (Clase no registrada) o simplemente no hacen nada.
  • API de Microsoft Graph y Office.js como ruta de migración: Para automatizar el nuevo Outlook, debe reescribir su código para usar la API REST de Microsoft Graph o un complemento web de Outlook creado con la biblioteca Office.js.

ADVERTISEMENT

Por qué el nuevo Outlook reemplaza el modelo de objetos clásico

El Outlook clásico para Windows usa la API de mensajería (MAPI) para acceder al correo, calendario, contactos y tareas. Este subsistema proporciona un modelo de objetos basado en COM muy completo que ha estado disponible desde Outlook 97. Miles de organizaciones dependen de macros de VBA y complementos COM de terceros que automatizan tareas como enviar solicitudes de reunión, archivar correos electrónicos o sincronizar con sistemas CRM.

El nuevo Outlook para Windows está construido sobre una arquitectura completamente diferente. Utiliza la misma plataforma basada en web que Outlook en la web y Outlook para Mac. En lugar de MAPI, se comunica con Exchange Online y Microsoft 365 a través de la API REST de Microsoft Graph. Este cambio aporta mejoras de rendimiento, mejor seguridad y una base de código unificada en todas las plataformas. Pero también significa que el modelo de objetos COM clásico no está disponible.

Cuando ejecuta código de automatización antiguo en el nuevo Outlook, el entorno de ejecución no puede encontrar los componentes MAPI que el código espera. Es posible que el objeto Application siga siendo accesible en algunos escenarios limitados, pero la mayoría de los métodos y propiedades que dependen de MAPI generarán errores. En concreto, los siguientes objetos y métodos principales ya no son compatibles:

  • Application.ActiveExplorer — Devuelve Nothing o genera un error.
  • Application.GetNamespace(“MAPI”) — Falla porque el espacio de nombres MAPI no está registrado.
  • Namespace.GetDefaultFolder — No puede acceder a las carpetas predeterminadas.
  • Namespace.GetSharedDefaultFolder — No puede abrir buzones compartidos.
  • Folder.Items — No puede enumerar elementos.
  • MailItem.Send — No puede enviar mensajes mediante programación.
  • Inspector y Explorer — No puede controlar ventanas ni leer el estado de la interfaz de usuario.

Pasos para identificar y migrar su código de automatización

Antes de reescribir todo, confirme que su código se ejecuta realmente en el nuevo Outlook. Luego decida si migrar a un método de automatización compatible.

Paso 1: determinar qué versión de Outlook está usando

  1. Abra el menú Archivo
    En Outlook, haga clic en Archivo en la cinta de opciones. Si ve una vista Backstage con Información de la cuenta, está usando el Outlook clásico. Si ve un menú con Cuenta y Configuración en la parte superior, está usando el nuevo Outlook.
  2. Revise la barra de título
    El nuevo Outlook muestra “Outlook” en la barra de título sin el número de versión. El Outlook clásico muestra “Microsoft Outlook” seguido del año, como “Microsoft Outlook 2021”.
  3. Busque el interruptor de alternancia
    En el nuevo Outlook, hay un interruptor en la esquina superior derecha etiquetado como “Probar el nuevo Outlook” o “Cambiar al Outlook clásico”. Si ve este interruptor, está ejecutando la nueva versión.

Paso 2: probar su código de automatización existente

  1. Abra el editor de VBA
    Presione Alt+F11. Si el editor se abre y muestra sus módulos, intente ejecutar una macro. Si ve el error 429 “El componente ActiveX no puede crear el objeto” o el error 91 “Variable de objeto o variable de bloque With no establecida”, el modelo de objetos no está disponible.
  2. Compruebe la carga de complementos
    Vaya a Archivo > Administrar complementos. Si su complemento COM aparece en la lista pero se muestra como “No cargado” o “Deshabilitado”, el nuevo Outlook no lo admite.

Paso 3: migrar macros de VBA a Office Scripts o Graph API

El nuevo Outlook no ejecuta macros de VBA. Tiene dos rutas de migración:

  • Office Scripts para Outlook (versión preliminar): Use scripts basados en TypeScript que se ejecutan en el entorno de Outlook basado en web. Office Scripts puede automatizar tareas como mover correos electrónicos, crear eventos de calendario y actualizar contactos. Requieren una licencia de Exchange Online.
  • API de Microsoft Graph: Para automatización avanzada, escriba un script o aplicación que llame a los puntos de conexión REST de Graph. Por ejemplo, para enviar un correo electrónico, use POST /users/{id}/sendMail. La API de Graph admite autenticación mediante OAuth 2.0 y se puede llamar desde PowerShell, Python, C# o cualquier lenguaje que pueda enviar solicitudes HTTP.

Paso 4: migrar complementos COM a complementos web de Outlook

Los complementos COM no son compatibles con el nuevo Outlook. Debe reconstruir su complemento como un complemento web de Outlook usando la biblioteca Office.js. Office.js proporciona API para leer y escribir elementos de correo, eventos de calendario y contactos. El complemento se ejecuta en un control de navegador en espacio aislado y se implementa como un archivo de manifiesto XML. Para comenzar:

  1. Instale el generador Yeoman para complementos de Office
    Abra un símbolo del sistema y ejecute: npm install -g yo generator-office
  2. Cree un nuevo proyecto de complemento
    Ejecute: yo office –projectType outlook-addin. Siga las indicaciones para elegir un marco de trabajo (JavaScript o TypeScript).
  3. Implemente su lógica de automatización
    Use Office.context.mailbox.item para acceder al mensaje o cita actual. Por ejemplo, para establecer el asunto: Office.context.mailbox.item.subject.setAsync(“Nuevo asunto”).
  4. Cargue y pruebe
    Cargue su manifest.xml en el nuevo Outlook yendo a Archivo > Administrar complementos > Agregar desde archivo.

ADVERTISEMENT

Si su código aún no funciona después de la migración

Outlook se bloquea o se congela al ejecutar un script de Graph API

Esto no es un bloqueo de Outlook sino un error de script. Las llamadas a la API de Graph se realizan fuera de Outlook. Si su script falla, verifique el token de autenticación. Asegúrese de haber concedido los permisos correctos en Azure AD, como Mail.Send o Calendars.ReadWrite. Use una herramienta como Microsoft Graph Explorer para probar sus llamadas a la API antes de incorporarlas en un script.

Office Scripts no aparecen en el nuevo Outlook

Office Scripts para Outlook aún está en versión preliminar. Es posible que no estén habilitados para su inquilino. Vaya al centro de administración de Microsoft 365, navegue a Configuración de la organización > Office Scripts y asegúrese de que la configuración “Permitir que los usuarios ejecuten Office Scripts en Outlook” esté activada. Además, verifique que su buzón esté alojado en Exchange Online, no en local.

El complemento web no puede acceder a buzones compartidos

Los complementos web de Outlook tienen compatibilidad limitada con buzones compartidos. La API de Office.js solo puede acceder al buzón actual. Para automatizar un buzón compartido, debe cambiar a ese buzón en la interfaz de usuario de Outlook o usar la API de Graph con el ID de usuario del buzón compartido en la URL del punto de conexión.

Modelo de objetos de Outlook clásico vs. automatización del nuevo Outlook: diferencias clave

Elemento Modelo de objetos de Outlook clásico Automatización del nuevo Outlook
Interfaz de programación Modelo de objetos basado en COM (VBA, C++, .NET) API REST de Microsoft Graph u Office.js
Tipos de automatización compatibles Macros de VBA, complementos COM, PowerShell con Outlook COM Office Scripts, complementos web, clientes HTTP independientes
Acceso a elementos de correo Objeto MailItem con propiedades como Subject, To, Body Punto de conexión /messages de Graph API u Office.context.mailbox.item
Compatibilidad con buzones compartidos Namespace.GetSharedDefaultFolder Graph API con el ID de usuario del buzón compartido en la URL
Compatibilidad con Exchange local Compatibilidad total con Exchange Server 2013, 2016, 2019 Solo Exchange Online (sin compatibilidad con local)
Método de autenticación Autenticación integrada de Windows (sin inicio de sesión explícito) OAuth 2.0 con Azure AD (requiere registro de aplicación)

Su código de automatización antiguo deja de funcionar en el nuevo Outlook porque el modelo de objetos COM y el subsistema MAPI están ausentes. Ahora puede identificar la versión que está ejecutando y planificar su migración a la API de Microsoft Graph u Office.js. Comience probando una tarea de automatización simple, como enviar un correo electrónico a través de Graph API, usando Microsoft Graph Explorer. Para escenarios avanzados, considere crear un complemento web de Outlook que se ejecute tanto en el nuevo Outlook como en Outlook en la web.

ADVERTISEMENT