Automação do Novo Modelo de Objetos do Outlook: Por que o Código Antigo Para de Funcionar
🔍 WiseChecker

Automação do Novo Modelo de Objetos do Outlook: Por que o Código Antigo Para de Funcionar

Se você possui macros VBA, add-ins COM ou scripts que automatizam tarefas do Outlook, como enviar e-mails, ler itens de calendário ou manipular pastas, pode descobrir que esse código para de funcionar após atualizar para o novo Outlook para Windows. A causa raiz é uma mudança arquitetônica fundamental: o novo Outlook substitui o modelo de objetos clássico baseado em MAPI por uma API REST que não oferece suporte à maioria das interfaces de automação legadas. Este artigo explica por que seu código antigo falha, quais métodos e propriedades do modelo de objetos são afetados e quais opções de migração você tem para restaurar seus fluxos de automação.

Principais Conclusões: Por que o Novo Outlook Quebra a Automação Antiga

  • Add-ins COM e macros VBA que usam o Modelo de Objetos do Outlook: O novo Outlook não carrega add-ins COM clássicos nem executa macros VBA, tornando todo código que depende dos objetos Application, Namespace, Explorer e Inspector não funcional.
  • Métodos baseados em MAPI como GetSharedDefaultFolder, CreateItem e Send: Esses métodos dependem do subsistema MAPI, que não está presente no novo Outlook. Chamadas a esses métodos retornam erro 0x80040154 (Classe não registrada) ou simplesmente não fazem nada.
  • Microsoft Graph API e Office.js como caminho de migração: Para automatizar o novo Outlook, você deve reescrever seu código para usar a API REST do Microsoft Graph ou um add-in web do Outlook criado com a biblioteca Office.js.

ADVERTISEMENT

Por que o Novo Outlook Substitui o Modelo de Objetos Clássico

O Outlook clássico para Windows usa a Messaging API (MAPI) para acessar e-mail, calendário, contatos e tarefas. Esse subsistema fornece um modelo de objetos COM rico que está disponível desde o Outlook 97. Milhares de organizações dependem de macros VBA e add-ins COM de terceiros que automatizam tarefas como enviar solicitações de reunião, arquivar e-mails ou sincronizar com sistemas CRM.

O novo Outlook para Windows é construído em uma arquitetura completamente diferente. Ele usa a mesma plataforma baseada na web do Outlook na web e do Outlook para Mac. Em vez de MAPI, ele se comunica com o Exchange Online e o Microsoft 365 por meio da API REST do Microsoft Graph. Essa mudança traz melhorias de desempenho, maior segurança e uma base de código unificada entre plataformas. Mas também significa que o modelo de objetos COM clássico não está disponível.

Quando você executa código de automação antigo no novo Outlook, o tempo de execução não encontra os componentes MAPI que o código espera. O objeto Application ainda pode estar acessível em alguns cenários limitados, mas a maioria dos métodos e propriedades que dependem de MAPI gerarão erros. Especificamente, os seguintes objetos e métodos principais não são mais suportados:

  • Application.ActiveExplorer — Retorna Nothing ou gera erro.
  • Application.GetNamespace(“MAPI”) — Falha porque o namespace MAPI não está registrado.
  • Namespace.GetDefaultFolder — Não consegue acessar pastas padrão.
  • Namespace.GetSharedDefaultFolder — Não consegue abrir caixas de correio compartilhadas.
  • Folder.Items — Não consegue enumerar itens.
  • MailItem.Send — Não consegue enviar mensagens programaticamente.
  • Inspector e Explorer — Não consegue controlar janelas ou ler o estado da interface do usuário.

Etapas para Identificar e Migrar Seu Código de Automação

Antes de reescrever tudo, confirme que seu código está realmente sendo executado no novo Outlook. Depois, decida se deseja migrar para um método de automação suportado.

Etapa 1: Determinar Qual Versão do Outlook Você Está Usando

  1. Abra o menu Arquivo
    No Outlook, clique em Arquivo na faixa de opções. Se você vir uma exibição Backstage com Informações da Conta, está usando o Outlook clássico. Se vir um menu com Conta e Configurações na parte superior, está usando o novo Outlook.
  2. Verifique a barra de título
    O novo Outlook exibe “Outlook” na barra de título sem o número da versão. O Outlook clássico mostra “Microsoft Outlook” seguido do ano, como “Microsoft Outlook 2021”.
  3. Procure pela opção de alternância
    No novo Outlook, há uma opção no canto superior direito rotulada “Experimentar o novo Outlook” ou “Alternar para o Outlook clássico”. Se você vir essa opção, está executando a nova versão.

Etapa 2: Testar Seu Código de Automação Existente

  1. Abra o editor VBA
    Pressione Alt+F11. Se o editor abrir e mostrar seus módulos, tente executar uma macro. Se você vir o erro 429 “ActiveX component can’t create object” ou erro 91 “Object variable or With block variable not set”, o modelo de objetos não está disponível.
  2. Verifique o carregamento do add-in
    Vá em Arquivo > Gerenciar Add-ins. Se seu add-in COM estiver listado, mas aparecer como “Não carregado” ou “Desabilitado”, o novo Outlook não o suporta.

Etapa 3: Migrar Macros VBA para Office Scripts ou Graph API

O novo Outlook não executa macros VBA. Você tem dois caminhos de migração:

  • Office Scripts para Outlook (visualização): Use scripts baseados em TypeScript que são executados no ambiente do Outlook baseado na web. Os Office Scripts podem automatizar tarefas como mover e-mails, criar eventos de calendário e atualizar contatos. Eles exigem uma licença do Exchange Online.
  • Microsoft Graph API: Para automação avançada, escreva um script ou aplicativo que chame os endpoints da API REST do Graph. Por exemplo, para enviar um e-mail, use POST /users/{id}/sendMail. A Graph API oferece suporte à autenticação via OAuth 2.0 e pode ser chamada a partir de PowerShell, Python, C# ou qualquer linguagem que possa enviar solicitações HTTP.

Etapa 4: Migrar Add-ins COM para Add-ins Web do Outlook

Add-ins COM não são suportados no novo Outlook. Você deve reconstruir seu add-in como um add-in web do Outlook usando a biblioteca Office.js. O Office.js fornece APIs para ler e gravar itens de e-mail, eventos de calendário e contatos. O add-in é executado em um controle de navegador em área restrita e é implantado como um arquivo de manifesto XML. Para começar:

  1. Instale o gerador Yeoman para Add-ins do Office
    Abra um prompt de comando e execute: npm install -g yo generator-office
  2. Crie um novo projeto de add-in
    Execute: yo office –projectType outlook-addin. Siga as instruções para escolher uma estrutura (JavaScript ou TypeScript).
  3. Implemente sua lógica de automação
    Use Office.context.mailbox.item para acessar a mensagem ou compromisso atual. Por exemplo, para definir o assunto: Office.context.mailbox.item.subject.setAsync(“Novo assunto”).
  4. Carregue lateralmente e teste
    Carregue seu manifest.xml no novo Outlook acessando Arquivo > Gerenciar Add-ins > Adicionar do arquivo.

ADVERTISEMENT

Se Seu Código Ainda Não Funcionar Após a Migração

O Outlook Trava ou Congela ao Executar um Script da Graph API

Isso não é uma falha do Outlook, mas um erro de script. As chamadas à Graph API são feitas fora do Outlook. Se seu script travar, verifique o token de autenticação. Certifique-se de ter concedido as permissões corretas no Azure AD, como Mail.Send ou Calendars.ReadWrite. Use uma ferramenta como o Microsoft Graph Explorer para testar suas chamadas de API antes de incorporá-las em um script.

Office Scripts Não Aparecem no Novo Outlook

Os Office Scripts para Outlook ainda estão em visualização. Eles podem não estar habilitados para seu locatário. Vá para o centro de administração do Microsoft 365, navegue até Configurações da Organização > Office Scripts e verifique se a opção “Permitir que usuários executem Office Scripts no Outlook” está ativada. Além disso, verifique se sua caixa de correio está hospedada no Exchange Online, não no local.

Add-in Web Não Consegue Acessar Caixas de Correio Compartilhadas

Os add-ins web do Outlook têm suporte limitado para caixas de correio compartilhadas. A API Office.js pode acessar apenas a caixa de correio atual. Para automatizar uma caixa de correio compartilhada, você deve alternar para essa caixa de correio na interface do Outlook ou usar a Graph API com o ID do usuário da caixa de correio compartilhada no URL do endpoint.

Modelo de Objetos Clássico do Outlook vs Automação do Novo Outlook: Principais Diferenças

Item Modelo de Objetos Clássico do Outlook Automação do Novo Outlook
Interface de programação Modelo de objetos baseado em COM (VBA, C++, .NET) API REST do Microsoft Graph ou Office.js
Tipos de automação suportados Macros VBA, add-ins COM, PowerShell com COM do Outlook Office Scripts, add-ins web, clientes HTTP autônomos
Acesso a itens de e-mail Objeto MailItem com propriedades como Subject, To, Body Endpoint /messages da Graph API ou Office.context.mailbox.item
Suporte a caixa de correio compartilhada Namespace.GetSharedDefaultFolder Graph API com ID do usuário da caixa compartilhada no URL
Suporte a Exchange local Suporte total para Exchange Server 2013, 2016, 2019 Apenas Exchange Online (sem suporte local)
Método de autenticação Autenticação Integrada do Windows (sem login explícito) OAuth 2.0 com Azure AD (requer registro de aplicativo)

Seu código de automação antigo para de funcionar no novo Outlook porque o modelo de objetos COM e o subsistema MAPI estão ausentes. Agora você pode identificar a versão que está usando e planejar sua migração para a API do Microsoft Graph ou Office.js. Comece testando uma tarefa de automação simples, como enviar um e-mail via Graph API, usando o Microsoft Graph Explorer. Para cenários avançados, considere criar um add-in web do Outlook que funcione tanto no novo Outlook quanto no Outlook na web.

ADVERTISEMENT