使用 AWS Lambda 更新訊息內容 - Amazon WorkMail

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 AWS Lambda 更新訊息內容

設定同步 AWS Lambda 功能以管理電子郵件流程後,您可以使用 Amazon M WorkMail essage 流程中的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。

提示

如果您先將 Amazon WorkMail Hello World Lambda 函數從 AWS Serverless Application Repository 部署到您的帳戶,系統會在您的帳戶中建立具有必要資源和許可的 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將更新的訊息內容傳送回 Amazon 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)

有關 GitHub分析傳輸中消息內容的方法的更多示例,請參閱(詳見)的 amazon-workmail-lambda-templates存儲庫。