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
Este es un ejemplo de capa: "LayerArn":"arn:aws:lambda:${. En este ejemplo, sustituya AWS::Region}:489970191081:layer:WorkMailLambdaLayer:2"${ por una región de aws apropiada, como us-east-1.AWS::Region}
sugerencia
Si comienza por implementar la función de Lambda Hello World
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
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