使用 AWS Lambda 更新消息内容 - 亚马逊 WorkMail

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS Lambda 更新消息内容

配置同步 AWS Lambda 函数来管理电子邮件流后,您可以使用 Amazon Mess WorkMail age 流程中的PutRawMessageContent操作API来更新传输中的电子邮件的内容。有关开始使用适用于 Amazon 的 Lambda 函数的更多信息 WorkMail,请参阅。配置同步运行 Lambda 规则有关更多信息API,请参阅 PutRawMessageContent

注意

PutRawMessageContent API需要 boto3 1.17.8,或者你可以在 Lambda 函数中添加一个层。要下载正确的 boto3 版本,请参阅上的 boto 页面。 GitHub有关添加层的更多信息,请参阅配置函数以使用层

下面是一个示例层:"LayerArn":"arn:aws:lambda:${AWS::Region}:489970191081:layer:WorkMailLambdaLayer:2"。在此示例中,将 ${AWS::Region} 替换为适当的 AWS 区域,如 us-east-1。

提示

如果您首先将AWS无服务器应用程序存储库中的 Amazon WorkMail Hello World Lambda 函数部署到您的账户,则系统会在您的账户中创建一个具有必要资源和权限的 Lambda 函数。然后,您可以根据使用案例将业务逻辑添加到 lambda 函数。

操作时请记住以下几点:

  • GetRawMessageContentAPI使用检索原始消息内容。有关更多信息,请参阅使用检索消息内容 AWS Lambda

  • 收到原始消息后,请更改MIME内容。完成后,将邮件上传到您账户中的 Amazon Simple Storage Service (Amazon S3) 存储桶。确保 S3 存储桶使用的区域与您的 Amazon WorkMail 操作 AWS 账户 相同,并且使用与您的API调用相同的AWS区域。

  • WorkMail 为了让 Amazon 处理请求,您的 S3 存储桶必须具有正确的策略才能访问 S3 对象。有关更多信息,请参阅 Example S3 policy

  • 使用 PutRawMessageContentAPI将更新后的消息内容发送回亚马逊 WorkMail。

注意

PutRawMessageContentAPI可确保更新消息的MIME内容符合RFC标准以及RawMessageContent数据类型中提及的标准。入库到您的Amazon WorkMail 组织的电子邮件并不总是符合这些标准,因此他们PutRawMessageContentAPI可能会拒绝这些标准。在这种情况下,您可以查阅返回的错误消息,了解有关如何解决任何问题的更多信息。

例 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/*" } } } ] }

以下示例显示了 Lambda 函数如何使用 Python 运行时更新传输中电子邮件的主题。

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)

有关分析传输中消息内容的更多方法示例,请参阅上的 amazon-workmail-lambda-templates GitHub存储库。