

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS Lambda を使用したメッセージコンテンツの更新
<a name="update-with-lambda"></a>

E メールフローを管理するように同期 AWS Lambda 関数を設定したら、Amazon WorkMail Message フロー API の `PutRawMessageContent`アクションを使用して、転送中の E メールメッセージの内容を更新できます。Amazon WorkMail 向け Lambda 関数の使用開始に関する詳細については、[同期 **[Lambda を実行]** ルールの設定](lambda.md#synchronous-rules) を参照してください。API の詳細については、[PutRawMessageContent](https://docs.aws.amazon.com/workmail/latest/APIReference/API_messageflow_PutRawMessageContent.html) を参照してください。

**注記**  
PutRawMessageContent API には boto3 1.17.8 が必要です。または、Lambda 関数にレイヤーを追加することもできます。正しい boto3 バージョンをダウンロードするには、[GitHub の boto ページ](https://github.com/boto/boto)を参照してください。レイヤーの追加の詳細については、[関数でレイヤーの使用を設定する](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-using)を参照してください。  
以下に `"LayerArn":"arn:aws:lambda:${AWS::Region}:489970191081:layer:WorkMailLambdaLayer:2"` のレイヤーの例を示します。この例では、`${AWS::Region}` を us-east-1 など、適切な AWS リージョンで代用します。

**ヒント**  
Amazon WorkMail をデプロイすることから始めたら [Hello World Lambda 関数](https://console.aws.amazon.com/lambda/home#/create/app?applicationId=arn:aws:serverlessrepo:us-east-1:489970191081:applications/workmail-hello-world-python) AWS Serverless Application Repository からアカウントまで、システムは必要なすべてのリソースとアクセス許可を持つ Lambda 関数をアカウントに作成します。その後、ユースケースに基づいて Lambda 関数にビジネスロジックを追加できます。

先へ進む場合、次の点に注意してください。
+ [GetRawMessageContent](https://docs.aws.amazon.com/workmail/latest/APIReference/API_messageflow_GetRawMessageContent.html) API を使用して元のメッセージコンテンツを取得します。詳細については、[を使用したメッセージコンテンツの取得 AWS Lambda](lambda-content.md) を参照してください。
+ 元のメッセージが表示されたら、MIME コンテンツを変更します。完了したら、メッセージをアカウントの Amazon Simple Storage Service (Amazon S3) バケットにアップロードします。S3 バケットが Amazon WorkMail オペレーション AWS アカウント と同じ を使用し、API コールと同じ AWS リージョンを使用していることを確認します。
+ Amazon WorkMail がリクエストを処理するには、S3 オブジェクトにアクセスするための正しいポリシーが S3 バケットに必要です。詳細については、「[Example S3 policy](#s3example)」を参照してください。
+ [PutRawMessageContent](https://docs.aws.amazon.com/workmail/latest/APIReference/API_messageflow_PutRawMessageContent.html) APIを使用して更新されたメッセージコンテンツを Amazon WorkMail に返信します。

**注記**  
`PutRawMessageContent` API は、更新されたメッセージの MIME コンテンツが RFC 標準を満たしていること、および [RawMessageContent](https://docs.aws.amazon.com/workmail/latest/APIReference/API_messageflow_RawMessageContent.html) データタイプで言及している基準を満たしていることを確認します。Amazon WorkMail 組織への受信メールは、必ずしもそれらの基準を満たすとは限らないため、`PutRawMessageContent` API はそれらを拒否する可能性があります。このような場合の問題の修正方法の詳細については、返されたエラーメッセージを参照してください。

**Example S3 ポリシーの例**    
****  

```
{
    "Version":"2012-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": "111122223333"
                },
                "Bool": {
                    "aws:SecureTransport": "true"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:workmailmessageflow:us-east-1:111122223333:message/WORKMAIL_ORGANIZATION_ID/*"
                }
            }
        }
    ]
}
```

次の例は、Lambda 関数が Python ランタイムを使用して、送信中の E メールメッセージの件名を更新する方法を示しています。

```
    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](https://github.com/aws-samples/amazon-workmail-lambda-templates) リポジトリを参照してください。