使用 AWS Lambda 更新邮件内容
配置同步 AWS Lambda 函数来管理电子邮件流后,您可以使用 Amazon WorkMail Message Flow API 中的 PutRawMessageContent 操作来更新传输中的电子邮件内容。有关开始使用适用于 Amazon WorkMail 的 Lambda 函数的更多信息,请参阅配置同步运行 Lambda 规则。有关该 API 的更多信息,请参阅 PutRawMessageContent。
注意
PutRawMessageContent API 需要 boto3 1.17.8,或者您可以向 Lambda 函数添加层。要下载正确的 boto3 版本,请参阅 GitHub 上的 boto 页面
下面是一个示例层:"LayerArn":"arn:aws:lambda:${。在此示例中,将 AWS::Region}:489970191081:layer:WorkMailLambdaLayer:2"${ 替换为适当的 AWS 区域,如 us-east-1。AWS::Region}
提示
如果您首先将 Amazon WorkMail Hello World Lambda 函数
操作时请记住以下几点:
-
使用 GetRawMessageContent API 检索原始邮件内容。有关更多信息,请参阅 使用 AWS Lambda 检索消息内容。
-
获得原始邮件后,请更改 MIME 内容。完成后,将邮件上传到您账户中的 Amazon Simple Storage Service (Amazon S3) 存储桶。确保 S3 存储桶使用与您的 Amazon WorkMail 操作相同的 AWS 账户,并且它使用与您的 API 调用相同的 AWS 区域。
-
要使 Amazon WorkMail 处理请求,您的 S3 存储桶必须具有正确的策略才能访问 S3 对象。有关更多信息,请参阅 Example S3 policy。
-
使用 PutRawMessageContent 将更新后的邮件内容发送回 Amazon WorkMail。
注意
PutRawMessageContent API 可确保更新邮件的 MIME 内容符合 RFC 标准以及 RawMessageContent 数据类型中提及的标准。传入 Amazon WorkMail 组织的电子邮件并不总是符合这些标准,因此 PutRawMessageContent API 可能会拒绝它们。在这种情况下,您可以查阅返回的错误消息,了解有关如何解决任何问题的更多信息。
例 S3 策略示例
以下示例显示了 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)
有关分析传输中邮件的内容的方法的更多示例,请参阅 GitHub 上的 amazon-workmail-lambda-templates