Actualización del contenido de los mensajes con AWS Lambda - Amazon WorkMail

Actualización del contenido de los mensajes con AWS Lambda

Después de configurar una función de AWS Lambda sincrónica para administrar flujos de correo electrónico, puede utilizar la acción PutRawMessageContent en la API de flujo de mensajes de Amazon WorkMail para actualizar el contenido de los mensajes de correo electrónico en tránsito. Para obtener más información sobre cómo iniciarse en el uso de funciones de Lambda para Amazon WorkMail, consulte Configuración de reglas de Ejecutar Lambda sincrónicas. Para obtener más información sobre la API, consulte PutRawMessageContent.

nota

La API PutRawMessageContent requiere boto3 1.17.8, o puede añadir una capa a su función de Lambda. Para descargar la versión correcta de boto3, consulte la página de boto en GitHub. Para obtener más información sobre cómo añadir capas, consulte Configuración de una función para utilizar capas.

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 de Lambda Hello World de Amazon WorkMail desde el repositorio de aplicaciones sin servidor de AWS en su cuenta, el sistema crea una función de 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 API GetRawMessageContent para recuperar el contenido del mensaje original. Para obtener más información consulte () Recuperación de contenido de los mensajes con AWS Lambda.

  • 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 la misma Cuenta de AWS que sus operaciones de Amazon WorkMail, y además la misma región de AWS que sus llamadas a la API.

  • Para que Amazon WorkMail procese las solicitudes, su 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.

  • Utilice la API PutRawMessageContent para enviar el contenido actualizado del mensaje de vuelta a Amazon WorkMail.

nota

La API PutRawMessageContent garantiza que el contenido MIME del mensaje actualizado cumpla las normas RFC, así como los criterios mencionados en el tipo de datos RawMessageContent. Los correos electrónicos entrantes en su organización de Amazon WorkMail no siempre cumplen esas normas, por lo que es posible que la API PutRawMessageContent los rechace. En tales casos, puede consultar el mensaje de error devuelto para obtener más información sobre cómo solucionar cualquier problema.

ejemplo Ejemplo de política S3
JSON
{ "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, consulte el repositorio amazon-workmail-lambda-templates en GitHub.