Mettre à jour le contenu des messages avec AWS Lambda - Amazon WorkMail

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Mettre à jour le contenu des messages avec AWS Lambda

Après avoir configuré une AWS Lambda fonction synchrone pour gérer les flux d'e-mails, vous pouvez utiliser l'PutRawMessageContentaction dans le flux de WorkMail messages Amazon API pour mettre à jour le contenu des e-mails en transit. Pour plus d'informations sur la prise en main des fonctions Lambda pour Amazon WorkMail, consultez. Configuration des règles Run Lambda synchrones Pour plus d'informations sur leAPI, consultez PutRawMessageContent.

Note

PutRawMessageContent APICela nécessite boto3 1.17.8, ou vous pouvez ajouter une couche à votre fonction Lambda. Pour télécharger la bonne version de boto3, consultez la page de démarrage sur. GitHub Pour plus d'informations sur l'ajout de couches, voir Configurer une fonction pour utiliser des couches.

Voici un exemple de couche :"LayerArn":"arn:aws:lambda:${AWS::Region}:489970191081:layer:WorkMailLambdaLayer:2". Dans cet exemple, remplacez-le ${AWS::Region} par une région aws appropriée, telle que us-east-1.

Astuce

Si vous commencez par déployer la fonction Lambda Amazon WorkMail Hello World depuis le AWS Serverless Application Repository sur votre compte, le système crée une fonction Lambda dans votre compte avec les ressources et autorisations nécessaires. Vous pouvez ensuite ajouter une logique métier à la fonction lambda, en fonction de vos cas d'utilisation.

Au fur et à mesure, souvenez-vous de ce qui suit :

  • Utilisez le GetRawMessageContentAPIpour récupérer le contenu du message d'origine. Pour plus d'informations, voir Récupération du contenu d'un message avec AWS Lambda.

  • Une fois que vous avez reçu le message original, modifiez le MIME contenu. Lorsque vous avez terminé, téléchargez le message dans un compartiment Amazon Simple Storage Service (Amazon S3) de votre compte. Assurez-vous que le compartiment S3 utilise la même région Compte AWS que vos WorkMail opérations Amazon et qu'il utilise la même AWS région que vos API appels.

  • Pour WorkMail qu'Amazon puisse traiter les demandes, votre compartiment S3 doit disposer de la politique appropriée afin d'accéder à l'objet S3. Pour de plus amples informations, veuillez consulter Example S3 policy.

  • Utilisez le PutRawMessageContentAPIpour renvoyer le contenu du message mis à jour à Amazon WorkMail.

Note

PutRawMessageContentAPICela garantit que le MIME contenu du message mis à jour répond aux RFC normes, ainsi qu'aux critères mentionnés dans le type de RawMessageContentdonnées. Les e-mails envoyés à votre WorkMail organisation Amazon ne répondent pas toujours à ces normes et PutRawMessageContent API peuvent donc être rejetés. Dans de tels cas, vous pouvez consulter le message d'erreur renvoyé pour plus d'informations sur la manière de résoudre les problèmes.

Exemple de politique S3
{ "Version": "2008-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": "AWS_ACCOUNT_ID" }, "Bool": { "aws:SecureTransport": "true" }, "ArnLike": { "aws:SourceArn": "arn:aws:workmailmessageflow:REGION:AWS_ACCOUNT_ID:message/WORKMAIL_ORGANIZATION_ID/*" } } } ] }

L'exemple suivant montre comment une fonction Lambda utilise le moteur d'exécution Python pour mettre à jour l'objet d'un e-mail en transit.

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)

Pour d'autres exemples de méthodes d'analyse du contenu des messages en transit, consultez le amazon-workmail-lambda-templatesréférentiel sur GitHub.