Criar um suplemento do Outlook de encriptação

Implemente a funcionalidade personalizada de encriptação e desencriptação num suplemento do Outlook para proteger as comunicações de e-mail. O OnMessageDecrypt evento permite que o suplemento identifique automaticamente mensagens encriptadas e processe a desencriptação, a apresentação de conteúdos e as notificações de erro.

Descrição geral dos fluxos de trabalho de encriptação e desencriptação

Dica

  • Os fluxos de trabalho de encriptação e desencriptação implementam a funcionalidade de ativação baseada em eventos. Se não estiver familiarizado com a ativação baseada em eventos nos suplementos do Outlook, recomendamos que saiba primeiro sobre a funcionalidade e a respetiva implementação. Para saber mais, veja Ativar suplementos com eventos.
  • O conjunto de requisitos mínimo e as plataformas suportadas podem variar para cada API recomendada nesta secção. Recomendamos que verifique todos os requisitos em relação aos conjuntos de requisitos da API JavaScript do Outlook e que o complemente com documentação para a API específica.

A tabela seguinte fornece uma descrição geral dos fluxos de trabalho de encriptação e desencriptação de um suplemento do Outlook. Também identifica se um passo requer uma solução personalizada ou se é suportado pela biblioteca de API javaScript (Office.js) do Office.

Etapa Implementação
O utilizador compõe uma mensagem e utiliza o suplemento para aplicar regras de encriptação Tem de implementar o seu próprio protocolo de encriptação para que o suplemento possa proteger o conteúdo da mensagem e os respetivos anexos.
O utilizador envia a mensagem Implemente um processador para o evento OnMessageSend para que o suplemento possa executar automaticamente o protocolo de encriptação quando o utilizador selecionar Enviar.

Para identificar uma mensagem encriptada com o suplemento durante o processo de desencriptação, utilize as APIs de cabeçalhos da Internet para adicionar um cabeçalho a uma mensagem. A chave de cabeçalho tem de corresponder ao valor especificado no HeaderName atributo do <elemento LaunchEvent> para o evento OnMessageDecrypt no manifesto do suplemento. Para obter mais informações, veja Implementar a desencriptação com a ativação baseada em eventos.
O destinatário recebe a mensagem encriptada e abre-a Se o destinatário tiver o mesmo suplemento que foi utilizado para encriptar a mensagem instalada no Outlook, o suplemento verifica se a chave de cabeçalho incluída na mensagem corresponde ao valor especificado para o OnMessageDecrypt evento no manifesto. Esta operação é efetuada automaticamente por um suplemento que processa o OnMessageDecrypt evento, para que não tenha de implementar manualmente o marcar. Se os cabeçalhos corresponderem, o evento ocorre e o OnMessageDecrypt processador é executado. Para obter mais informações, veja Implementar a desencriptação com a ativação baseada em eventos.
O suplemento desencripta a mensagem Tem de implementar o seu próprio protocolo de desencriptação no OnMessageDecrypt processador de eventos. Enquanto o suplemento desencripta a mensagem e os respetivos anexos, é apresentada uma notificação ao utilizador para alertá-lo de que a mensagem está a ser processada pelo suplemento. Esta notificação é apresentada automaticamente por um suplemento que processa o OnMessageDecrypt evento, para que não tenha de criar manualmente um.
O destinatário vê a mensagem desencriptada e os respetivos anexos, se existirem Depois de concluída a operação de desencriptação, é apresentada automaticamente uma notificação ao utilizador para alertá-lo de que o suplemento terminou o processamento da mensagem. No processador OnMessageDecrypt , chame o método event.completed e transmita-lhe um objeto MessageDecryptEventCompletedOptions . Com o MessageDecryptEventCompletedOptions objeto, pode especificar se pretende apresentar o conteúdo desencriptado ao destinatário. Para obter mais informações, veja Implementar o processamento de eventos.

Experimentar um suplemento concluído

Para ver imediatamente um suplemento de encriptação concluído em ação, experimente o exemplo Encriptar e desencriptar mensagens no Outlook.

Implementar a desencriptação com a ativação baseada em eventos

Tem de implementar os seus próprios protocolos de encriptação e desencriptação. O suplemento também tem de ser configurado para processar o OnMessageDecrypt evento para determinar convenientemente quando o suplemento pode desencriptar uma mensagem e apresentar os conteúdos desencriptados. Para implementar o OnMessageDecrypt evento, tem de:

  1. Configure o manifesto do suplemento.
  2. Implementar o processamento de eventos.

Ambientes suportados

O OnMessageDecrypt evento é suportado na superfície De Leitura da Mensagem. O suporte varia consoante o cliente e o ambiente do Exchange, conforme mostrado na tabela seguinte.

Cliente Exchange Online Exchange Subscription Edition (SE) Exchange Server 2019 Exchange Server 2016
Navegador da Web Com suporte Não disponível Não disponível Não disponível
Windows (novo) Com suporte Não disponível Não disponível Não disponível
Windows (clássico)
Versão 2602 (Compilação 19725.20126) e posterior
Com suporte Não disponível Não disponível Não disponível
Mac Não disponível Não disponível Não disponível Não disponível
Android Não disponível Não disponível Não disponível Não disponível
iOS Não disponível Não disponível Não disponível Não disponível

Configurar o manifesto

Observação

O OnMessageDecrypt evento e "extensions.autoRunEvents.events.options.headerName" a propriedade estão em pré-visualização com o manifesto unificado. Não utilize a funcionalidade de desencriptação com o manifesto unificado num suplemento de produção.

No ficheiro manifest.json do suplemento, tem de configurar a "extensions.runtimes" matriz e adicionar a "extensions.autoRunEvents" matriz para ativar a ativação baseada em eventos no suplemento.

  1. Adicione o objeto a seguir à "extensions.runtimes" matriz. Observe o seguinte sobre esta marcação.

    • O "id" do runtime está definido como o nome "autorun_runtime"descritivo .
    • A "code" propriedade tem uma propriedade subordinada "page" que está definida como um ficheiro HTML e uma propriedade subordinada "script" que está definida como um ficheiro JavaScript. O Office utiliza um destes valores consoante a plataforma.
      • Outlook na Web e o novo Outlook no Windows executam o processador num runtime do browser, que carrega um ficheiro HTML. Esse ficheiro, por sua vez, contém uma <script> etiqueta que carrega o ficheiro JavaScript.
      • O Outlook clássico no Windows executa o processador de eventos num runtime apenas javaScript, que carrega diretamente um ficheiro JavaScript. Para obter mais informações, consulte Runtimes nos Suplementos do Office.
    • A "lifetime" propriedade está definida como "short", o que significa que o runtime é iniciado quando o evento é acionado e é encerrado quando o processador é concluído.
    • As ações mapeiam processadores JavaScript para os OnMessageSend eventos e OnMessageDecrypt .
    "runtimes": [
        {
            "requirements": {
                "capabilities": [
                    {
                        "name": "Mailbox",
                        "minVersion": "1.16"
                    }
                ]
            },
            "id": "autorun_runtime",
            "type": "general",
            "code": {
                "page": "https://localhost:3000/launchevents.html",
                "script": "https://localhost:3000/launchevents.js"
            },
            "lifetime": "short",
            "actions": [
                {
                    "id": "onMessageSendHandler",
                    "type": "executeFunction"
                },
                {
                    "id": "onMessageDecryptHandler",
                    "type": "executeFunction"
                }
            ]
        }
    ],
    
  2. Adicione a seguinte "autoRunEvents" matriz como uma propriedade do objeto na "extensions" matriz. Observe o seguinte sobre esta marcação.

    • É criado um objeto de evento para cada evento que o suplemento processa. Neste exemplo, é criado um objeto de evento para OnMessageSend e outro para OnMessageDecrypt. Ambos os eventos utilizam o nome "messageSending" do evento de manifesto unificado e "messageDecrypt", conforme descrito na tabela de eventos suportados.
    • Para garantir que o processador adequado é executado quando ocorre um evento, o nome da função fornecido em "actionId" tem de corresponder ao nome utilizado na "id" propriedade do objeto aplicável na matriz de "runtimes.actions" um passo anterior.
    • A propriedade "opções" fornece configuração adicional para os OnMessageSend eventos e OnMessageDecrypt .
      • Para OnMessageSend, a opção "sendMode" especifica se um utilizador é capaz de enviar a sua mensagem se não cumprir as condições de um suplemento. Neste exemplo, a opção "softBlock" é especificada. Para saber mais sobre as opções de modo de envio, consulte a secção "Opções do modo de envio disponíveis" de Eventos Handle OnMessageSend e OnAppointmentSend no seu suplemento do Outlook com Alertas Inteligentes.
      • Para OnMessageDecrypt, a opção "headerName" especifica o nome do cabeçalho da Internet utilizado para identificar se uma mensagem foi encriptada pelo suplemento. O mesmo cabeçalho é adicionado a uma mensagem encriptada pelo suplemento.
    "autoRunEvents": [
        {
            "events": [
              {
                  "type": "messageSending",
                  "actionId": "onMessageSendHandler",
                  "options": {
                      "sendMode": "softBlock"
                  }
              },
              {
                  "type": "messageDecrypt",
                  "actionId": "onMessageDecryptHandler",
                  "options": {
                      "headerName": "contoso-encrypted"
                  }
              }
            ]
        }
    ]
    

Implementar o processamento de eventos

O OnMessageDecrypt processador de eventos é utilizado para executar a operação de desencriptação e determinar se pretende apresentar o conteúdo desencriptado de uma mensagem.

  • Para garantir que o processador é executado quando o OnMessageDecrypt evento ocorre, chame Office.actions.associate no ficheiro JavaScript onde o processador é implementado. Esta ação mapeia o nome do processador especificado no FunctionName atributo do <LaunchEvent> elemento no manifesto para o seu equivalente JavaScript.
  • Após a conclusão da operação de desencriptação, tem de chamar para indicar event.completed ao cliente que o suplemento concluiu o processamento do OnMessageDecrypt evento. Para apresentar os conteúdos desencriptados de uma mensagem e os respetivos anexos, transmita um objeto MessageDecryptEventCompletedOptions à chamada e defina a event.completed respetiva propriedade allowEvent como true. Em seguida, especifique o conteúdo desencriptado da mensagem nas propriedades emailBody e attachments do objeto. Também pode especificar quaisquer dados que o seu suplemento possa precisar para processamento na propriedade contextData . Por exemplo, pode armazenar cabeçalhos de Internet personalizados para desencriptar mensagens em cenários de resposta e reencaminhamento.

Observação

Tenha em atenção o seguinte ao criar um suplemento baseado em eventos para o Outlook clássico no Windows.

  • As importações não são atualmente suportadas no ficheiro JavaScript que contém o processador de eventos.
  • Quando a função JavaScript especificada no manifesto para processar uma execução de evento, o código no Office.onReady() e Office.initialize não é executado. Recomendamos que adicione qualquer lógica de arranque necessária ao processador de eventos, como verificar a versão do Outlook do utilizador, ao processador de eventos.

Segue-se um exemplo de um OnMessageDecrypt processador de eventos.

function onMessageDecryptHandler(event) {
    // Your code to decrypt the contents of a message would appear here.
    ...

    // Use the results from your decryption process to display the decrypted contents of the message body and attachments.
    const decryptedBodyContent = "<p>Please find attached the recent report and its supporting documentation.</p>";
    const decryptedBody = {
        coercionType: Office.CoercionType.Html,
        content: decryptedBodyContent
    };

    // Decrypted content and properties of a file attachment.
    const decryptedPdfFile = "JVBERi0xLjQKJeLjz9MKNCAwIG9i...";
    const pdfFileName = "Fabrikam_Report_202509";

    // Decrypted properties of a cloud attachment.
    const cloudFilePath = "https://contosostorage.com/reports/weekly_forecast.xlsx";
    const cloudFileName = "weekly_forecast.xlsx";

    // Decrypted content and properties of an inline image.
    const decryptedImageFile = "iVBORw0KGgoAAAANSUhEUgAA...";
    const imageFileName = "banner.png";
    const imageContentId = "image001.png@01DC1DD9.1A4AA300";

    const decryptedAttachments = [
        {
            attachmentType: Office.MailboxEnums.AttachmentType.File,
            content: decryptedPdfFile,
            isInline: false,
            name: pdfFileName
        },
        {
            attachmentType: Office.MailboxEnums.AttachmentType.Cloud,
            isInline: false,
            name: cloudFileName,
            path: cloudFilePath
        },
        {
            attachmentType: Office.MailboxEnums.AttachmentType.File,
            content: decryptedImageFile,
            contentId: imageContentId,
            isInline: true,
            name: imageFileName
        }
    ];

    event.completed({
        allowEvent: true,
        emailBody: decryptedBody,
        attachments: decryptedAttachments,
        contextData: { messageType: "ReplyFromDecryptedMessage" }
    });
}

// IMPORTANT: To ensure your add-in is supported in Outlook, remember to map the event handler name specified in the manifest to its JavaScript counterpart.
Office.actions.associate("onMessageDecryptHandler", onMessageDecryptHandler);

Dica

Quando as imagens são adicionadas a uma mensagem como anexos inline, é-lhes atribuído automaticamente um ID de conteúdo. No corpo de uma mensagem, o ID de conteúdo de um anexo inline é especificado no src atributo do <img> elemento semelhante ao seguinte exemplo.

<img width=96 height=96 id="Picture_1" src="cid:image001.png@01DC1E6F.FC7C7410">

Para identificar e fornecer facilmente estes anexos inline durante a desencriptação, recomendamos que guarde os IDs de conteúdo dos anexos inline no cabeçalho da mensagem durante a encriptação. Ligue para Office.context.mailbox.item.getAttachmentsAsync para obter o ID de conteúdo de um anexo inline. Em seguida, ligue para Office.context.mailbox.item.internetHeaders.setAsync para guardar o ID no cabeçalho da mensagem.

Desencriptar anexos de itens do Outlook (pré-visualização)

O suporte para desencriptar anexos de itens do Outlook (Office.MailboxEnums.AttachmentType.Itemparticularmente anexos de e-mail) está disponível para pré-visualização no Outlook na Web e no Windows (novo e clássico). Para pré-visualizar esta funcionalidade no Outlook clássico no Windows, tem de instalar a Versão 2606 (Compilação 20114.15110) ou posterior. Em seguida, adira ao programa Microsoft 365 Insider e selecione a opção Canal Beta para aceder às compilações beta do Office. Para testar esta funcionalidade com o código de exemplo neste artigo, atualize a onMessageDecryptHandler função com o seguinte código.

    // Decrypted content and properties of an email attachment.
    const decryptedEmailFile = "VGhpcyBpcyBhIHRleHQgZmlsZS4=...";
    const emailFileName = "Fabrikam_Report_202508.eml";

    const decryptedAttachments = [
        ...
        {
            attachmentType: Office.MailboxEnums.AttachmentType.Item,
            content: decryptedEmailFile,
            name: emailFileName
        }
    ];
    ...

Personalizar mensagens de erro para a operação de desencriptação (pré-visualização)

As mensagens de erro personalizadas para operações de desencriptação falhadas estão disponíveis para pré-visualização no Outlook na Web e no Windows (novo e clássico). Para pré-visualizar esta funcionalidade no Outlook clássico no Windows, tem de instalar a Versão 2606 (Compilação 20114.15110) ou posterior. Em seguida, adira ao programa Microsoft 365 Insider e selecione a opção Canal Beta para aceder às compilações beta do Office.

Se a operação de desencriptação falhar, a allowEvent propriedade da event.completed chamada está definida como falsee o Outlook apresenta a seguinte notificação predefinida ao utilizador: "<O nome> do suplemento não conseguiu processar a sua mensagem". Para especificar uma mensagem de erro personalizada, defina a propriedade errorMessage da chamada do event.completed suplemento. A sua mensagem personalizada tem o prefixo "Erro do nome> do <suplemento:". Se não for possível mostrar a sua mensagem personalizada, a notificação predefinida é apresentada.

O seguinte exemplo de código mostra como especificar uma mensagem de erro personalizada para o suplemento de desencriptação.

event.completed({
    allowEvent: false,
    errorMessage: "This message couldn't be decrypted. Contact the Contoso IT team for further assistance."
});

Gerir a distribuição de conteúdo desencriptado (pré-visualização)

Para ajudar a impedir a distribuição não autorizada de conteúdo desencriptado, as opções de controlo de acesso estão disponíveis para pré-visualização no Outlook na Web e no Windows (novo e clássico). Para pré-visualizar esta funcionalidade no Outlook clássico no Windows, tem de instalar a Versão 2606 (Compilação 20114.15110) ou posterior. Em seguida, adira ao programa Microsoft 365 Insider e selecione a opção Canal Beta para aceder às compilações beta do Office.

Para limitar a impressão, cópia ou gravação de conteúdo desencriptado, inclua a propriedade accessControls da event.completed chamada. Em seguida, defina allowPrint, allowCopyPaste e allowSave properties como false. Se a accessControls propriedade não for especificada, os controlos de acesso são predefinidos para true.

Para testar esta funcionalidade com o código de exemplo neste artigo, atualize a event.completed chamada da onMessageDecryptHandler função com o seguinte código.

    event.completed({
        allowEvent: true,
        emailBody: decryptedBody,
        attachments: decryptedAttachments,
        contextData: { messageType: "ReplyFromDecryptedMessage" },
        accessControls: {
            allowPrint: false,
            allowCopyPaste: false,
            allowSave: false
        }
    });

Observação

  • No Outlook na Web, definir a allowCopyPaste propriedade para false também impede que os utilizadores capturem o ecrã sob a forma de capturas de ecrã ou gravações. A política de captura de ecrã permanece em vigor até que o utilizador recarregue o separador do browser Outlook.
  • No Outlook na Web e no novo Outlook no Windows, definir a allowPrint propriedade para false desativar o menu de contexto (que fornece opções como Copiar, Selecionar tudo e Imprimir). Se a allowCopyPaste propriedade estiver definida como true, o utilizador ainda pode copiar conteúdo premindo Ctrl+C, mas a opção Copiar no menu de contexto não está disponível.

Comportamento e limitações

  • Tenha em atenção os comportamentos e limitações dos suplementos baseados em eventos. Para saber mais, veja Ativar suplementos com eventos.

  • Uma vez que cada suplemento utiliza o seu próprio protocolo de encriptação, uma mensagem só pode ser desencriptada pelo mesmo suplemento que o encriptou. Quando um utilizador não tem o suplemento necessário instalado para desencriptar uma mensagem, uma notificação alerta-o de que a mensagem está encriptada. Para orientar o utilizador através do processo de desencriptação, personalize uma mensagem de marcador de posição para o corpo da mensagem encriptada. A mensagem de marcador de posição pode incluir informações sobre como instalar o seu suplemento. Para definir o corpo da mensagem durante o processo de encriptação, ligue para Office.context.mailbox.item.body.setAsync.

    Uma mensagem de marcador de posição de exemplo de uma mensagem encriptada.

  • Para garantir a segurança e confidencialidade dos dados, os conteúdos desencriptados não são armazenados no cliente do Outlook. O conteúdo de uma mensagem encriptada é desencriptado sempre que um utilizador a abre.

  • Primeiro, é necessário desencriptar uma mensagem encriptada para que um utilizador possa responder ou reencaminhá-la. Um utilizador não pode responder ou reencaminhar uma mensagem encriptada enquanto está a ser desencriptada.

  • Se um utilizador navegar para outro item de correio enquanto uma mensagem encriptada estiver a ser desencriptada, o processo de desencriptação deixa de ser executado. O utilizador tem de selecionar ou abrir novamente a mensagem para ativar o processo de desencriptação.

  • Ao responder ou reencaminhar mensagens encriptadas, os rascunhos são guardados sem encriptação na pasta Rascunhos .

  • A attachments propriedade do event.completed método não suporta anexos do tipo Office.MailboxEnums.AttachmentType.Item, exceto a pré-visualização no Outlook na Web e no Windows (novo e clássico). Para saber mais, veja Desencriptar anexos de itens do Outlook (pré-visualização).

  • Os suplementos de encriptação personalizados não podem encriptar mensagens que já estejam protegidas por DRM ou S/MIME.

  • No Outlook na Web e no novo Outlook no Windows, quando as mensagens encriptadas são agrupadas por conversação, apenas a mensagem atualmente selecionada do tópico de conversação é desencriptada. As outras mensagens no thread de conversação permanecem encriptadas até serem selecionadas.

  • No Outlook na Web e no novo Outlook no Windows, os utilizadores só podem transferir uma mensagem desencriptada no formato EML. A opção para transferir no formato MSG não está disponível.

Notificações de desencriptação

Os suplementos que processam o OnMessageDecrypt evento apresentam automaticamente notificações em determinados cenários de desencriptação, conforme descrito na tabela seguinte.

Notificação Cenário
<O nome> do suplemento não está disponível e não consegue processar a sua mensagem neste momento. Aplica-se apenas ao Outlook clássico no Windows. Esta notificação é apresentada quando o suplemento não é carregado porque um erro impediu o carregamento do suplemento ou o cliente ou computador do utilizador está offline.
<O nome> do suplemento não conseguiu processar a sua mensagem. Foi encontrado um erro enquanto o suplemento estava a desencriptar a mensagem. Para repetir a operação de desencriptação, o destinatário tem de mudar para outra mensagem e, em seguida, abrir novamente a mensagem encriptada para invocar o OnMessageDecrypt evento.
<O suplemento de nome> do suplemento está a desencriptar a sua mensagem. O suplemento está a processar o OnMessageDecrypt evento para desencriptar a mensagem.
Esta mensagem é encriptada pelo <suplemento de nome> do suplemento. Esta notificação é apresentada aos destinatários que não têm o suplemento de encriptação necessário instalado. Para fornecer orientações sobre como desencriptar a mensagem, inclua uma mensagem de marcador de posição no corpo da mensagem encriptada. Para obter mais informações, veja Comportamento e limitações.
<O suplemento de nome> do suplemento desencriptou a sua mensagem. O suplemento desencriptou com êxito o conteúdo da mensagem. O utilizador pode agora ver a mensagem e os respetivos anexos.
<O nome> do suplemento está a demorar mais tempo do que o esperado para processar a sua mensagem. O suplemento está em execução há mais de cinco segundos, mas menos de cinco minutos.
<O nome> do suplemento excedeu o limite de tempo. Para tentar novamente, selecione outro e-mail e, em seguida, regresse a esta mensagem. O suplemento excede o tempo limite após a execução durante cinco minutos. Para repetir a operação de desencriptação, o destinatário tem de mudar para outra mensagem e, em seguida, abrir novamente a mensagem encriptada para invocar o OnMessageDecrypt evento.
<O nome> do suplemento excedeu o limite de tempo. (pré-visualização) O suplemento excede o tempo limite após a execução durante cinco minutos. Esta notificação inclui uma ação Repetir para que o destinatário possa repetir a operação de desencriptação sem mudar para outra mensagem. Esta funcionalidade de repetição está disponível para pré-visualização no Outlook na Web e no Windows (novo e clássico). Para pré-visualizar esta funcionalidade no Outlook clássico no Windows, tem de instalar a Versão 2606 (Compilação 20114.15110) ou posterior. Em seguida, adira ao programa Microsoft 365 Insider e selecione a opção Canal Beta para aceder às compilações beta do Office.
<O nome> do suplemento não consegue processar esta mensagem porque está protegido por uma funcionalidade de segurança incorporada. O suplemento tenta processar uma mensagem que já está protegida por DRM ou S/MIME.
Mensagem de erro personalizada (pré-visualização) Foi encontrado um erro enquanto o suplemento estava a desencriptar a mensagem. Para repetir a operação de desencriptação, o destinatário tem de mudar para outra mensagem e, em seguida, abrir novamente a mensagem encriptada para invocar o OnMessageDecrypt evento. Para obter orientações sobre como personalizar uma mensagem de erro para a operação de desencriptação, veja Personalizar mensagens de erro para a operação de desencriptação (pré-visualização).

Confira também