Compartir a través de


Creación de un complemento de Cifrado de Outlook (versión preliminar)

Implemente la funcionalidad de cifrado y descifrado personalizada en un complemento de Outlook para proteger las comunicaciones por correo electrónico. El OnMessageRead evento permite que el complemento identifique automáticamente los mensajes cifrados y controle el descifrado, la visualización del contenido y las notificaciones de error.

Nota:

Las OnMessageRead API de eventos y descifrado están en versión preliminar. Las características de la versión preliminar no deben usarse en complementos de producción, ya que pueden cambiar en función de los comentarios que recibamos. Le invitamos a probar esta característica en entornos de desarrollo o pruebas y recibir comentarios sobre su experiencia a través de GitHub (consulte la sección "Comentarios de complementos de Office" al final de esta página).

Introducción a los flujos de trabajo de cifrado y descifrado

Sugerencia

  • Los flujos de trabajo de cifrado y descifrado implementan la característica de activación basada en eventos. Si no está familiarizado con la activación basada en eventos en complementos de Outlook, se recomienda que primero obtenga información sobre la característica y su implementación. Para más información, consulte Activación de complementos con eventos.
  • El conjunto de requisitos mínimo y las plataformas admitidas pueden variar para cada API recomendada en esta sección. Se recomienda comprobar los requisitos de los conjuntos de requisitos de la API de JavaScript de Outlook y complementarlo con documentación para la API específica.

En la tabla siguiente se proporciona información general sobre los flujos de trabajo de cifrado y descifrado de un complemento de Outlook. También identifica si un paso requiere una solución personalizada o si es compatible con la biblioteca de API de JavaScript (Office.js) de Office.

Paso Implementación
El usuario redacta un mensaje y usa el complemento para aplicar reglas de cifrado Debe implementar su propio protocolo de cifrado para que el complemento pueda proteger el contenido del mensaje y sus datos adjuntos.
El usuario envía el mensaje Implemente un controlador para el evento OnMessageSend para que el complemento pueda ejecutar automáticamente el protocolo de cifrado cuando el usuario seleccione Enviar.

Para identificar un mensaje cifrado mediante el complemento durante el proceso de descifrado, use las API de encabezados de Internet para agregar un encabezado a un mensaje. La clave de encabezado debe coincidir con el valor especificado en el HeaderName atributo del <elemento LaunchEvent> para el evento OnMessageRead en el manifiesto del complemento. Para obtener más información, consulte Implementación del descifrado mediante la activación basada en eventos.
El destinatario recibe el mensaje cifrado y lo abre. Si el destinatario tiene el mismo complemento que se usó para cifrar el mensaje instalado en Outlook, el complemento comprueba si la clave de encabezado incluida en el mensaje coincide con el valor especificado para el OnMessageRead evento en el manifiesto. Esta operación la realiza automáticamente un complemento que controla el OnMessageRead evento, de modo que no tenga que implementar manualmente la comprobación. Si los encabezados coinciden, se produce el OnMessageRead evento y se ejecuta su controlador. Para obtener más información, consulte Implementación del descifrado mediante la activación basada en eventos.
El complemento descifra el mensaje Debe implementar su propio protocolo de descifrado en el controlador de OnMessageRead eventos. Mientras el complemento descifra el mensaje y sus datos adjuntos, se muestra una notificación al usuario para avisarle de que el complemento está procesando su mensaje. Este complemento muestra automáticamente esta notificación que controla el OnMessageRead evento, de modo que no tenga que crear uno manualmente.
El destinatario ve el mensaje descifrado y sus datos adjuntos, si los hay Una vez completada la operación de descifrado, se muestra automáticamente una notificación al usuario para avisarle de que el complemento ha terminado de procesar el mensaje. En el OnMessageRead controlador, llame al método event.completed y páselo un objeto MessageDecryptEventCompletedOptions . Con el MessageDecryptEventCompletedOptions objeto , puede especificar si desea mostrar el contenido descifrado al destinatario. Para obtener más información, consulte Implementación del control de eventos.

Implementación del descifrado mediante la activación basada en eventos

Debe implementar sus propios protocolos de cifrado y descifrado. El complemento también debe configurarse para controlar el OnMessageRead evento a fin de determinar convenientemente cuándo el complemento puede descifrar un mensaje y mostrar el contenido descifrado. Para implementar el OnMessageRead evento, debe:

  1. Configure el manifiesto del complemento.
  2. Implemente el control de eventos.

Entornos admitidos

El OnMessageRead evento se admite en la superficie Lectura de mensajes. La compatibilidad varía según el cliente y el entorno de Exchange, como se muestra en la tabla siguiente.

Cliente Exchange Online Exchange Subscription Edition (SE) Exchange Server 2019 Exchange Server 2016
Explorador web No disponible No disponible No disponible No disponible
Windows (nuevo) No disponible No disponible No disponible No disponible
Windows (clásico)
Versión 2510 (compilación 19312.20000) y versiones posteriores
En versión preliminar No disponible No disponible No disponible
Mac No disponible No disponible No disponible No disponible
Android No disponible No disponible No disponible No disponible
iOS No disponible No disponible No disponible No disponible

Vista previa de las API de descifrado en Outlook clásico en Windows

Para obtener una vista previa de las API de descifrado en Outlook clásico en Windows, únase al programa Microsoft 365 Insider y elija el canal beta en el cliente de Outlook. El cliente debe estar en la versión 2510 (compilación 19312.20000) o posterior.

Outlook clásico en Windows incluye una copia local de las versiones de producción y beta de Office.js en lugar de cargar desde la red de entrega de contenido (CDN). De forma predeterminada, se hace referencia a la copia de producción local de la API. Para hacer referencia a la copia beta local de la API, debe configurar el registro del equipo. Esto le permitirá probar las características de vista previa en los controladores de eventos en Outlook clásico en Windows.

  1. En el Registro, vaya a HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Outlook\Options\WebExt\Developer. Si la clave no existe, créela.

  2. Cree una entrada denominada EnableBetaAPIsInJavaScript y establezca su valor en 1.

    La clave

Configuración del manifiesto

Nota:

Actualmente OnMessageRead , el evento solo se puede implementar con un manifiesto de solo complemento.

Para activar el complemento en el OnMessageRead evento, debe configurar el <nodo VersionOverridesV1_1> del archivo demanifest.xml del complemento de la siguiente manera.

  • Para ejecutar un complemento basado en eventos en Outlook clásico en Windows, debe especificar el archivo JavaScript que contiene el controlador de eventos en el <elemento secundario Override> del <elemento Runtime> .
  • Especifique el OnMessageRead evento en el Type atributo de un <elemento LaunchEvent> . Debe asignar el nombre de función del controlador de eventos al FunctionName atributo del elemento . Para facilitar la comprobación de si el complemento cifró el mensaje, se debe especificar una clave de encabezado en el HeaderName atributo . El mismo encabezado se agrega a un mensaje cifrado por el complemento.

A continuación se muestra un ejemplo de un <VersionOverrides> nodo que implementa el OnMessageRead evento .

<VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides" xsi:type="VersionOverridesV1_0">
  <VersionOverrides xmlns="http://schemas.microsoft.com/office/mailappversionoverrides/1.1" xsi:type="VersionOverridesV1_1">
    <Requirements>
      <bt:Sets DefaultMinVersion="1.15">
        <bt:Set Name="Mailbox"/>
      </bt:Sets>
    </Requirements>
    <Hosts>
      <Host xsi:type="MailHost">
        <Runtimes>
            <!-- References the HTML file that links to the event handler. -->
          <Runtime resid="WebViewRuntime.Url">
            <!-- References the JavaScript file that contains the event handler. This is used by classic Outlook on Windows. -->
            <Override type="javascript" resid="JSRuntime.Url"/>
          </Runtime>
        </Runtimes>
        <DesktopFormFactor>
          <FunctionFile resid="WebViewRuntime.Url"/>
          <!-- Implements event-based activation. -->
          <ExtensionPoint xsi:type="LaunchEvent">
            <LaunchEvents>
              <LaunchEvent Type="OnMessageSend" FunctionName="onMessageSendHandler" SendMode="SoftBlock"/>
              <LaunchEvent Type="OnMessageRead" FunctionName="onMessageReadHandler" HeaderName="contoso-encrypted"/>
            </LaunchEvents>
            <!-- Identifies the runtime to be used (also referenced by the Runtime element). -->
            <SourceLocation resid="WebViewRuntime.Url"/>
        </ExtensionPoint>
        </DesktopFormFactor>
      </Host>
    </Hosts>
    <Resources>
      ...
      <bt:Urls>
        <bt:Url id="WebViewRuntime.Url" DefaultValue="https://www.contoso.com/launchevent.html"/>
        <bt:Url id="JSRuntime.Url" DefaultValue="https://www.contoso.com/launchevent.js"/>
      </bt:Urls>
      ...
    </Resources>
  </VersionOverrides>
</VersionOverrides>

Implementación del control de eventos

El OnMessageRead controlador de eventos se usa para ejecutar la operación de descifrado y determinar si se debe mostrar el contenido descifrado de un mensaje.

  • Para asegurarse de que el controlador se ejecuta cuando se produce el OnMessageRead evento, llame a Office.actions.associate en el archivo JavaScript donde se implementa el controlador. Esto asigna el nombre del controlador especificado en el FunctionName atributo del <LaunchEvent> elemento del manifiesto a su homólogo de JavaScript.
  • Una vez finalizada la operación de descifrado, debe llamar event.completed a para indicar al cliente que el complemento ha completado el procesamiento del OnMessageRead evento. Para mostrar el contenido descifrado de un mensaje y sus datos adjuntos, pase un objeto MessageDecryptEventCompletedOptions a la event.completed llamada y establezca su propiedad allowEvent en true. A continuación, especifique el contenido descifrado del mensaje en las propiedades emailBody y attachments del objeto. También puede especificar los datos que el complemento pueda necesitar para su procesamiento en la propiedad contextData . Por ejemplo, puede almacenar encabezados de Internet personalizados para descifrar mensajes en escenarios de respuesta y reenvío.

Nota:

Tenga en cuenta lo siguiente al crear un complemento basado en eventos para Outlook clásico en Windows.

  • Las importaciones no se admiten actualmente en el archivo JavaScript que contiene el controlador de eventos.
  • Cuando la función de JavaScript especificada en el manifiesto para controlar un evento se ejecuta, el código de Office.onReady() y Office.initialize no se ejecuta. Se recomienda agregar cualquier lógica de inicio necesaria para el controlador de eventos, como comprobar la versión de Outlook del usuario, al controlador de eventos en su lugar.

A continuación se muestra un ejemplo de un OnMessageRead controlador de eventos.

function onMessageReadHandler(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 content and properties of a mail item.
    const decryptedEmailFile = "VGhpcyBpcyBhIHRleHQgZmlsZS4=...";
    const emailFileName = "Fabrikam_Report_202508.eml";

    // 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.Item,
            content: decryptedEmailFile,
            isInline: false,
            name: emailFileName
        },
        {
            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("onMessageReadHandler", onMessageReadHandler);

Sugerencia

En Outlook clásico en Windows, cuando las imágenes se agregan a un mensaje como datos adjuntos insertados, se les asigna automáticamente un identificador de contenido. En el cuerpo de un mensaje, el identificador de contenido de un archivo adjunto insertado se especifica en el src atributo del <img> elemento similar al ejemplo siguiente.

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

Para identificar y proporcionar fácilmente estos datos adjuntos insertados durante el descifrado, se recomienda guardar los identificadores de contenido de los datos adjuntos insertados en el encabezado del mensaje durante el cifrado. Llame a Office.context.mailbox.item.getAttachmentsAsync para obtener el identificador de contenido de los datos adjuntos insertados. A continuación, llame a Office.context.mailbox.item.internetHeaders.setAsync para guardar el identificador en el encabezado del mensaje.

Comportamiento y limitaciones

  • Tenga en cuenta los comportamientos y las limitaciones de los complementos basados en eventos. Para más información, consulte Activación de complementos con eventos.

  • Dado que cada complemento usa su propio protocolo de cifrado, el mismo complemento que lo cifró solo puede descifrar un mensaje. Cuando un usuario no tiene instalado el complemento necesario para descifrar un mensaje, una notificación le avisa de que el mensaje está cifrado. Para guiar al usuario a través del proceso de descifrado, personalice un mensaje de marcador de posición para el cuerpo del mensaje cifrado. El mensaje de marcador de posición puede incluir información sobre cómo instalar el complemento. Para establecer el cuerpo del mensaje durante el proceso de cifrado, llame a Office.context.mailbox.item.body.setAsync.

    Mensaje de marcador de posición de ejemplo de un mensaje cifrado.

  • Para garantizar la seguridad y confidencialidad de los datos, el contenido descifrado no se almacena en el cliente de Outlook. El contenido de un mensaje cifrado se descifra cada vez que un usuario lo abre.

  • Primero se debe descifrar un mensaje cifrado para que un usuario pueda responderlo o reenviarlo. Un usuario no puede responder ni reenviar un mensaje cifrado mientras se está descifrando.

  • Si un usuario navega a otro elemento de correo mientras se descifra un mensaje cifrado, el proceso de descifrado deja de ejecutarse. El usuario debe seleccionar o volver a abrir el mensaje para activar el proceso de descifrado.

  • Al responder o reenviar mensajes cifrados, los borradores se guardan sin cifrar en la carpeta Borradores .

Notificaciones de descifrado

Los complementos que controlan el OnMessageRead evento muestran automáticamente notificaciones en determinados escenarios de descifrado, como se describe en la tabla siguiente.

Notificación Escenario
<El nombre> del complemento no está disponible y no puede procesar el mensaje en este momento. Solo se aplica a Outlook clásico en Windows. Esta notificación se muestra cuando el complemento no se puede cargar porque un error impidió que se cargara el complemento o el cliente o la máquina del usuario está sin conexión.
<El nombre> del complemento no pudo procesar el mensaje. Se encontró un error mientras el complemento descifraba el mensaje. Para volver a intentar la operación de descifrado, el destinatario debe cambiar a otro mensaje y, a continuación, volver a abrir el mensaje cifrado para invocar el OnMessageRead evento.
<El complemento de nombre> de complemento está descifrando el mensaje. El complemento controla el OnMessageRead evento para descifrar el mensaje.
Este mensaje se cifra mediante <el complemento de nombre> de complemento. Esta notificación se muestra a los destinatarios que no tienen instalado el complemento de cifrado necesario. Para proporcionar instrucciones sobre cómo descifrar el mensaje, incluya un mensaje de marcador de posición en el cuerpo del mensaje cifrado. Para obtener más información, consulte Comportamiento y limitaciones.
<El complemento de nombre> de complemento ha descifrado el mensaje. El complemento descifra correctamente el contenido del mensaje. El usuario ahora puede ver el mensaje y sus datos adjuntos.
<El nombre> del complemento tarda más de lo esperado en procesar el mensaje. El complemento se ha estado ejecutando durante más de cinco segundos, pero menos de cinco minutos.
<Se agotó el tiempo de espera del nombre> del complemento. Para volver a intentarlo, seleccione otro correo electrónico y vuelva a este mensaje. El complemento agota el tiempo de espera después de ejecutarse durante cinco minutos. Para volver a intentar la operación de descifrado, el destinatario debe cambiar a otro mensaje y, a continuación, volver a abrir el mensaje cifrado para invocar el OnMessageRead evento.

Vea también