

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configuración AWS Lambda para Amazon WorkMail
<a name="lambda"></a>

Utilice la acción **Ejecutar Lambda** en las reglas de flujo de correo entrante y saliente para pasar los mensajes de correo electrónico que cumplan las reglas a una AWS Lambda función para su procesamiento.

Elija una de las siguientes configuraciones para una acción de **Ejecutar Lambda** en Amazon. WorkMail

**Configuración asincrónica de **Ejecutar Lambda****  
Los mensajes de correo electrónico que coinciden con la regla de flujo se transfieren a una función de Lambda para su procesamiento antes de su envío o entrega. Utilice esta configuración para modificar el contenido del correo electrónico. También puede controlar el flujo de correo electrónico entrante o saliente para diferentes casos de uso. Por ejemplo, una regla transferida a una función de Lambda puede bloquear la entrega de mensajes de correo electrónico confidenciales, eliminar archivos adjuntos o añadir cláusulas de exención de responsabilidad.

**Configuración sincrónica de **Ejecutar Lambda****  
Los mensajes de correo electrónico que coinciden con la regla de flujo se transfieren a una función de Lambda para su procesamiento mientras se envían o entregan. Esta configuración no afecta a la entrega de correo electrónico y se utiliza para tareas como recopilar métricas de mensajes de correo electrónico entrantes o salientes.

Tanto si elige una configuración sincrónica como asincrónica, el objeto de evento transferido a su función de Lambda contiene metadatos para el evento de correo electrónico entrante o saliente. También puede usar el ID del mensaje en los metadatos para acceder al contenido completo del mensaje de correo electrónico. Para obtener más información, consulte [Recuperar el contenido de los mensajes con AWS Lambda](lambda-content.md). Para obtener más información acerca de los eventos de correo electrónico, consulte [Datos de eventos de Lambda](#lambda-data).

Para obtener más información acerca de las reglas de flujo de correo electrónico entrante y saliente, consulte [Administración de flujos de correo electrónico](email-flows.md). Para obtener más información acerca de Lambda, consulte la [Guía para desarrolladores de *AWS Lambda *](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html).

**nota**  
Actualmente, las reglas de flujo de correo electrónico de Lambda solo hacen referencia a las funciones de Lambda de la misma región de AWS y de Cuenta de AWS la organización de Amazon WorkMail que se está configurando.

## Primeros pasos con AWS Lambda Amazon WorkMail
<a name="start-lambda"></a>

Para empezar a utilizarla AWS Lambda con Amazon WorkMail, te recomendamos implementar la [función WorkMail Hello World Lambda](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:489970191081:applications/workmail-hello-world-python) desde tu AWS Serverless Application Repository cuenta. La función cuenta con todos los recursos necesarios y los permisos configurados para usted. Para ver más ejemplos, consulta el [amazon-workmail-lambda-templates](https://github.com/aws-samples/amazon-workmail-lambda-templates)repositorio en GitHub.

Si decide crear su propia función Lambda, debe configurar los permisos mediante AWS Command Line Interface ()AWS CLI. En el siguiente comando de ejemplo, haga lo siguiente:
+ Sustituya `MY_FUNCTION_NAME` por el nombre de su función de Lambda.
+ `REGION`Sustitúyala por tu región WorkMail de Amazon AWS. Las WorkMail regiones de Amazon disponibles incluyen `us-east-1` (EE. UU. Este (Norte de Virginia)), `us-west-2` (EE. UU. Oeste (Oregón)) y `eu-west-1` (Europa (Irlanda)).
+ Sustituya `AWS_ACCOUNT_ID` por su ID de Cuenta de AWS de 12 dígitos.
+ `WORKMAIL_ORGANIZATION_ID`Sustitúyelo por tu identificador de WorkMail organización de Amazon. Puede encontrarlo en la ficha de su organización en la página **Organizaciones**.



```
aws --region REGION lambda add-permission --function-name MY_FUNCTION_NAME 
--statement-id AllowWorkMail 
--action "lambda:InvokeFunction" 
--principal workmail.REGION.amazonaws.com
--source-arn arn:aws:workmail:REGION:AWS_ACCOUNT_ID:organization/WORKMAIL_ORGANIZATION_ID
```

Para obtener más información sobre el uso de AWS CLI, consulta la [https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html).

## Configuración de reglas de **Ejecutar Lambda** sincrónicas
<a name="synchronous-rules"></a>

Para configurar una regla de **Ejecutar Lambda** sincrónica, cree una regla de flujo de correo electrónico con la acción **Ejecutar Lambda** y seleccione la casilla **Ejecutar en sincronía**. Para obtener más información acerca de la creación de reglas de flujo de correo, consulte [Creación de reglas de flujo de correo electrónico](create-email-rules.md).

Para terminar de crear la regla sincrónica, añada el Nombre de recurso de Amazon (ARN) de Lambda y configure las siguientes opciones.

****Acción alternativa****  
La acción que Amazon WorkMail aplica si la función Lambda no se ejecuta. Esta acción también se aplica a los destinatarios que se omitan en la respuesta de Lambda si no se establece el indicador **allRecipients**. La **Acción alternativa** no puede ser otra acción de Lambda.

****Tiempo de espera de regla** (en minutos)**  
El período de tiempo durante el que se vuelve a intentar la función Lambda si Amazon WorkMail no la invoca. La **Acción alternativa** se aplica al final de este período de tiempo.

**nota**  
Las reglas de **Ejecutar Lambda** sincrónicas solo admiten la condición de destino **\$1**.

## Datos de eventos de Lambda
<a name="lambda-data"></a>

La función de Lambda se activa a través de los siguientes datos de eventos. La presentación de los datos varía en función del lenguaje de programación utilizado para la función de Lambda.

```
{
    "summaryVersion": "2018-10-10",
    "envelope": {
        "mailFrom" : {
            "address" : "from@example.com"
        },
        "recipients" : [
           { "address" : "recipient1@example.com" },
           { "address" : "recipient2@example.com" }
        ]
    },
    "sender" : {
        "address" :  "sender@example.com"
    },
    "subject" : "Hello From Amazon WorkMail!",
    "messageId": "00000000-0000-0000-0000-000000000000",
    "invocationId": "00000000000000000000000000000000",
    "flowDirection": "INBOUND",
    "truncated": false
}
```

El JSON del evento incluye los siguientes datos.

**summaryVersion**  
El número de versión de `LambdaEventData`. Solo se actualiza al realizar un cambio incompatible con versiones anteriores en `LambdaEventData`.

**sobre**  
El sobre del mensaje de correo electrónico, que incluye los siguientes: campos.    
**mailFrom**  
La dirección **De**, que suele ser la dirección de correo electrónico del usuario que envió el mensaje. Si el usuario envió el mensaje de correo electrónico como otro usuario o en nombre de otro usuario, el campo **mailFrom** devuelve la dirección de correo electrónico del usuario en cuyo nombre se ha enviado el correo electrónico, no la dirección de correo electrónico del remitente real.  
**recipients**  
Una lista de todas las direcciones de correo electrónico de los destinatarios. Amazon WorkMail no distingue entre **To**, **CC** o **BCC**.  
En el caso de las reglas de flujo de correo entrante, esta lista incluye los destinatarios de todos los dominios de la WorkMail organización de Amazon en la que has creado la regla. La función de Lambda se invoca por separado para cada conversación SMTP del remitente y el campo de destinatarios enumera los destinatarios de esa conversación SMTP. Los destinatarios con dominios externos no se incluyen.

**remitente**  
La dirección de correo electrónico del usuario que envió el mensaje de correo electrónico en nombre de otro usuario. Este campo se establece únicamente cuando un mensaje de correo electrónico se envía en nombre de otro usuario.

**subject**  
La línea de asunto del correo electrónico. Se trunca cuando supera el límite de 256 caracteres.

**messageId**  
Un identificador único que se utiliza para acceder a todo el contenido del mensaje de correo electrónico cuando se utiliza el SDK de Amazon WorkMail Message Flow.

**invocationId**  
El ID de una invocación de Lambda única. Este identificador permanece igual cuando se llama a una función Lambda más de una vez para la misma función. **LambdaEventData** Utilícelo para detectar reintentos y evitar duplicaciones.

**flowDirection**  
Indica la dirección del flujo de correo electrónico, bien **ENTRANTE** o **SALIENTE**.

**truncated**  
Se aplica al tamaño de carga, no a la longitud de la línea de asunto. Si es `true`, el tamaño de la carga supera el límite de 128 KB, por lo que la lista de destinatarios se trunca para no superar el límite.

## Esquema de respuesta de **Ejecutar Lambda** sincrónica
<a name="synchronous-schema"></a>

Cuando una regla de flujo de correo electrónico con una acción sincrónica **Ejecutar Lambda** coincide con un mensaje de correo entrante o saliente, Amazon WorkMail llama a la función Lambda configurada y espera la respuesta antes de realizar una acción en el mensaje de correo electrónico. La función de Lambda devuelve una respuesta conforme a un esquema predefinido que enumera las acciones, los tipos de acción, los parámetros aplicables y los destinatarios a los que se aplica la acción.

En el siguiente ejemplo se muestra una respuesta de **Ejecutar Lambda** sincrónica. Las respuestas varían en función del lenguaje de programación utilizado para la función de Lambda.

```
{
    "actions": [                          
      {
        "action" : {                       
          "type": "string",                 
          "parameters": { various }       
        },
        "recipients": [list of strings],      
        "allRecipients": boolean            
      }
    ]
}
```

El JSON de respuesta incluye los siguientes datos.

**acción**  
La acción que se debe realizar para los destinatarios.

**type**  
El tipo de acción. Los tipos de acción no se devuelven para las acciones **Ejecutar Lambda** asincrónicas.  
Los tipos de acción de reglas entrantes incluyen **BOUNCE**, **DROP**, **DEFAULT**, **BYPASS\$1SPAM\$1CHECK** y **MOVE\$1TO\$1JUNK**. Para obtener más información, consulte [Acciones de las reglas de correo electrónico entrante](email-flows.md#email-flows-rule-actions).  
Los tipos de acción de regla de salida incluyen **BOUNCE**, **DROP** y **DEFAULT**. Para obtener más información, consulte [Acciones de las reglas de correo electrónico saliente](email-flows.md#email-flows-rule-outbound). 

**parameters**  
Parámetros de acción adicionales. Se admite para el tipo de acción **BOUNCE** como un objeto JSON con la clave **bounceMessage** y la **cadena**de valor. Este mensaje de rebote se utiliza para crear el mensaje de correo electrónico de rebote.

**recipients**  
Lista de direcciones de correo electrónico en las que se debe realizar la acción. Puede agregar nuevos destinatarios a la respuesta aunque no se hayan incluido en la lista de destinatarios original. Este campo no es obligatorio si **allRecipients** es true para una acción.  
Cuando se llama a una acción de Lambda para el correo electrónico entrante, solo puede añadir nuevos destinatarios que sean de su organización. Los nuevos destinatarios se agregan a la respuesta como **CCO**.

**allRecipients**  
Cuando es verdadero, aplica la acción a todos los destinatarios que no estén sujetos a otra acción específica en la respuesta de Lambda.

### Límites de la acción **Ejecutar Lambda** sincrónica
<a name="synchronous-limits"></a>

Los siguientes límites se aplican cuando Amazon WorkMail invoca funciones de Lambda para acciones sincrónicas de **Run** Lambda: 
+ Las funciones de Lambda deben responder en un plazo de 15 segundos o se tratarán como invocaciones fallidas.
**nota**  
El sistema reintenta la invocación tras el intervalo **Tiempo de espera de regla** que usted especifique.
+ Se permiten respuestas de funciones de Lambda de hasta 256 KB.
+ Se permiten hasta 10 acciones únicas en la respuesta. Las acciones mayores de 10 están sujetas a la **Acción de reserva** configurada. 
+ Se permiten hasta 500 destinatarios para las funciones de Lambda salientes.
+ El valor máximo para el **Tiempo de espera de regla** es de 240 minutos. Si se configura el valor mínimo de 0, no habrá reintentos antes de que Amazon WorkMail aplique la acción alternativa.

### Fallos de la acción **Ejecutar Lambda** sincrónica
<a name="synchronous-failures"></a>

**Si Amazon no WorkMail puede invocar la función Lambda debido a un error, una respuesta no válida o un tiempo de espera de Lambda, WorkMail Amazon vuelve a intentar la invocación con un retraso exponencial que reduce la velocidad de procesamiento hasta que se complete el período de tiempo de espera de la regla.** A continuación, se aplica la **Acción de reserva** a todos los destinatarios del mensaje de correo electrónico. Para obtener más información, consulte [Configuración de reglas de **Ejecutar Lambda** sincrónicas](#synchronous-rules).

## Ejemplo de respuestas de **Ejecutar Lambda** sincrónicas
<a name="synchronous-responses"></a>

En los siguientes ejemplos se muestra la estructura de las respuestas de **Ejecutar Lambda** sincrónicas más comunes.

**Example : quitar destinatarios especificados de un mensaje de correo electrónico**  
En el siguiente ejemplo se muestra la estructura de una respuesta de **Ejecutar Lambda** sincrónica para eliminar destinatarios de un mensaje de correo electrónico.  

```
{
    "actions": [
      {
        "action": {
          "type": "DEFAULT"
        },
        "allRecipients": true
      },
      {
        "action": {
          "type": "DROP"
        },
        "recipients": [
          "drop-recipient@example.com"
        ]
      }
    ]
}
```

**Example : rebote con un mensaje de correo electrónico personalizado**  
En el siguiente ejemplo se muestra la estructura de una respuesta de **Ejecutar Lambda** sincrónica para rebotar con un mensaje de correo electrónico personalizado.  

```
{
    "actions" : [
      {
        "action" : {
          "type": 'BOUNCE',
          "parameters": {
            "bounceMessage" : "Email in breach of company policy."
          }
        },
        "allRecipients": true
      }
    ]
}
```

**Example : agregar destinatarios a un mensaje de correo electrónico**  
En el siguiente ejemplo se muestra la estructura de una respuesta de **Ejecutar Lambda** sincrónica para añadir destinatarios al mensaje de correo electrónico. Esto no actualiza los campos **Para** o **CC** del mensaje de correo electrónico.  

```
{
    "actions": [
      {
        "action": { 
          "type": "DEFAULT" 
        },
        "recipients": [
          "new-recipient@example.com"
         ]
      },
      {
        "action": { 
          "type": "DEFAULT" 
        },
        "allRecipients": true
      }
    ]
}
```

[Para obtener más ejemplos de código para usar al crear funciones de Lambda para las acciones de Run **Lambda, consulte las plantillas de Amazon Lambda**. WorkMail ](https://github.com/aws-samples/amazon-workmail-lambda-templates)

## Más información sobre el uso de Lambda con Amazon WorkMail
<a name="lambda-more"></a>

También puede acceder al contenido completo del mensaje de correo electrónico que activa la función de Lambda. Para obtener más información, consulte [Recuperar el contenido de los mensajes con AWS Lambda](lambda-content.md). 

# Recuperar el contenido de los mensajes con AWS Lambda
<a name="lambda-content"></a>

Tras configurar una AWS Lambda función para gestionar los flujos de correo electrónico de Amazon WorkMail, puede acceder a todo el contenido de los mensajes de correo electrónico que se procesan con Lambda. Para obtener más información sobre cómo empezar a utilizar Lambda for Amazon WorkMail, consulte. [Configuración AWS Lambda para Amazon WorkMail](lambda.md)

Para acceder al contenido completo de los mensajes de correo electrónico, usa la `GetRawMessageContent` acción en la API Amazon WorkMail Message Flow. El ID de mensaje de correo electrónico que se transfiere a su función de Lambda en el momento de la invocación envía una solicitud a la API. A continuación, la API responde con el contenido MIME completo del mensaje de correo electrónico. Para obtener más información, consulta [Amazon WorkMail Message Flow](https://docs.aws.amazon.com/workmail/latest/APIReference/API_Operations_Amazon_WorkMail_Message_Flow.html) en la *referencia de la WorkMail API de Amazon*.

En el siguiente ejemplo se muestra cómo una función de Lambda que utiliza el entorno de tiempo de ejecución Python puede recuperar el contenido completo del mensaje.

**sugerencia**  
Si comienza por implementar la [función Lambda de Amazon WorkMail Hello World](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:489970191081:applications/workmail-hello-world-python) desde su cuenta, el AWS Serverless Application Repository sistema crea una función Lambda en su cuenta con todos los recursos y permisos necesarios. A continuación, puede añadir su lógica empresarial a la función de Lambda en función de su caso de uso.

```
import boto3
import email
import os

def email_handler(event, context):
    workmail = boto3.client('workmailmessageflow', region_name=os.environ["AWS_REGION"])
    msg_id = event['messageId']
    raw_msg = workmail.get_raw_message_content(messageId=msg_id)

    parsed_msg = email.message_from_bytes(raw_msg['messageContent'].read())
    print(parsed_msg)
```

Para ver ejemplos más detallados de cómo analizar el contenido de los mensajes que están en tránsito, consulte el [amazon-workmail-lambda-templates](https://github.com/aws-samples/amazon-workmail-lambda-templates)repositorio en. GitHub

**nota**  
Solo utilizas la API Amazon WorkMail Message Flow para acceder a los mensajes de correo electrónico en tránsito. Solo puede acceder a los mensajes en las 24 horas siguientes a su envío o recepción. Para acceder mediante programación a los mensajes del buzón de correo de un usuario, utilice uno de los otros protocolos compatibles con Amazon WorkMail, como IMAP o Exchange Web Services (EWS).

# Actualización del contenido de los mensajes con AWS Lambda
<a name="update-with-lambda"></a>

Tras configurar una AWS Lambda función sincrónica para gestionar los flujos de correo electrónico, puede utilizar la `PutRawMessageContent` acción en la API de flujo de WorkMail mensajes de Amazon para actualizar el contenido de los mensajes de correo electrónico en tránsito. Para obtener más información sobre cómo empezar a utilizar las funciones de Lambda para Amazon WorkMail, consulte. [Configuración de reglas de **Ejecutar Lambda** sincrónicas](lambda.md#synchronous-rules) Para obtener más información sobre la API, consulte [ PutRawMessageContent](https://docs.aws.amazon.com/workmail/latest/APIReference/API_messageflow_PutRawMessageContent.html).

**nota**  
La PutRawMessageContent API requiere boto3 1.17.8, o puede añadir una capa a la función Lambda. [Para descargar la versión correcta de boto3, consulta la página de boto en. GitHub](https://github.com/boto/boto) Para obtener más información sobre cómo añadir capas, consulte [Configuración de una función para utilizar capas](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-using).   
Este es un ejemplo de capa: `"LayerArn":"arn:aws:lambda:${AWS::Region}:489970191081:layer:WorkMailLambdaLayer:2"`. En este ejemplo, sustituya `${AWS::Region}` por una región de aws apropiada, como us-east-1.

**sugerencia**  
Si comienza por implementar la [función Lambda de Amazon WorkMail Hello World](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:489970191081:applications/workmail-hello-world-python) desde el AWS Serverless Application Repository en su cuenta, el sistema creará una función Lambda en su cuenta con los recursos y permisos necesarios. A continuación, puede añadir su lógica empresarial a la función de Lambda en función de sus casos de uso.

A medida que avance, recuerde lo siguiente:
+ Utilice la [ GetRawMessageContent](https://docs.aws.amazon.com/workmail/latest/APIReference/API_messageflow_GetRawMessageContent.html)API para recuperar el contenido original del mensaje. Para obtener más información, consulte [Recuperar el contenido de los mensajes con AWS Lambda](lambda-content.md).
+ Una vez que tenga el mensaje original, cambie el contenido MIME. Cuando termine, suba el mensaje a un bucket de Amazon Simple Storage Service (Amazon S3) de su cuenta. Asegúrese de que el bucket de S3 utilice lo Cuenta de AWS mismo que sus WorkMail operaciones de Amazon y de que utilice la misma región de AWS que las llamadas a la API.
+ Para WorkMail que Amazon procese las solicitudes, tu bucket de S3 debe tener la política correcta para poder acceder al objeto de S3. Para obtener más información, consulte [Example S3 policy](#s3example).
+ Usa la [ PutRawMessageContent](https://docs.aws.amazon.com/workmail/latest/APIReference/API_messageflow_PutRawMessageContent.html)API para enviar el contenido actualizado del mensaje a Amazon WorkMail.

**nota**  
La `PutRawMessageContent` API garantiza que el contenido MIME del mensaje actualizado cumpla con los estándares de la RFC, así como con los criterios mencionados en el tipo de [RawMessageContent](https://docs.aws.amazon.com/workmail/latest/APIReference/API_messageflow_RawMessageContent.html)datos. Los correos electrónicos entrantes a tu WorkMail organización de Amazon no siempre cumplen con esos estándares, por lo que es posible que la `PutRawMessageContent` API los rechace. En tales casos, puede consultar el mensaje de error devuelto para obtener más información sobre cómo solucionar cualquier problema.

**Example Ejemplo de política S3**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "workmail.REGION.amazonaws.com"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion"
            ],
            "Resource": "arn:aws:s3:::My-Test-S3-Bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "Bool": {
                    "aws:SecureTransport": "true"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:workmailmessageflow:us-east-1:111122223333:message/WORKMAIL_ORGANIZATION_ID/*"
                }
            }
        }
    ]
}
```

En el siguiente ejemplo se muestra cómo una función de Lambda utiliza el tiempo de ejecución de Python para actualizar el asunto de un mensaje de correo electrónico en tránsito.

```
    import boto3
    import os
    import uuid
    import email
     
    def email_handler(event, context):
        workmail = boto3.client('workmailmessageflow', region_name=os.environ["AWS_REGION"])
        s3 = boto3.client('s3', region_name=os.environ["AWS_REGION"])
        
        msg_id = event['messageId']
        raw_msg = workmail.get_raw_message_content(messageId=msg_id)
        parsed_msg = email.message_from_bytes(raw_msg['messageContent'].read())
        
        # Updating subject. For more examples, see https://github.com/aws-samples/amazon-workmail-lambda-templates.
        parsed_msg.replace_header('Subject', "New Subject Updated From Lambda")
       
        # Store updated email in S3
        key = str(uuid.uuid4());
        s3.put_object(Body=parsed_msg.as_bytes(), Bucket="amzn-s3-demo-bucket", Key=key)
     
        # Update the email in WorkMail
        s3_reference = {
            'bucket': "amzn-s3-demo-bucket",
            'key': key
        }
        content = {
            's3Reference': s3_reference
        }
        workmail.put_raw_message_content(messageId=msg_id, content=content)
```

Para ver más ejemplos de formas de analizar el contenido de los mensajes en tránsito, consulta el [ amazon-workmail-lambda-templates](https://github.com/aws-samples/amazon-workmail-lambda-templates)repositorio en. GitHub