

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon WorkMail AWS Lambda 용 구성
<a name="lambda"></a>

인바운드 및 아웃바운드 이메일 흐름 규칙에서 **Lambda 실행** 작업을 사용하여 규칙과 일치하는 이메일 메시지를 처리를 위해 AWS Lambda 함수에 전달합니다.

Amazon WorkMail에서 **Lambda 실행** 작업을 수행하려면 다음 구성 중에서 선택하세요.

**동기식 **Lambda 실행** 구성**  
흐름 규칙과 일치하는 이메일 메시지는 전송되기 전에 처리를 위해 Lambda 함수로 전달됩니다. 이 구성을 사용하여 이메일 콘텐츠를 수정할 수 있습니다. 또한 다양한 사용 사례에 맞게 인바운드 또는 아웃바운드 이메일 흐름을 제어할 수 있습니다. 예를 들어, Lambda 함수에 전달된 규칙은 민감한 이메일 메시지의 전송을 차단하거나 첨부 파일을 제거하거나 고지 사항을 추가할 수 있습니다.

**비동기식 **Lambda 실행** 구성**  
흐름 규칙과 일치하는 이메일 메시지는 전송되는 동안 처리를 위해 Lambda 함수로 전달됩니다. 이 구성은 이메일 전송에 영향을 주지 않으며 인바운드 또는 아웃바운드 이메일 메시지에 대한 지표 수집과 같은 작업에 사용됩니다.

동기식 구성을 선택하든 비동기식 구성을 선택하든 상관없이 Lambda 함수에 전달된 이벤트 객체에는 인바운드 또는 아웃바운드 이메일 이벤트에 대한 메타데이터가 포함됩니다. 메타데이터의 메시지 ID를 사용하여 이메일 메시지의 전체 콘텐츠에 액세스할 수도 있습니다. 자세한 내용은 [를 사용하여 메시지 콘텐츠 검색 AWS Lambda](lambda-content.md) 단원을 참조하십시오. 이메일 이벤트에 대한 자세한 내용은 [Lambda 이벤트 데이터](#lambda-data) 다음을 참조하십시오.

인바운드 및 아웃바운드 이메일 흐름 규칙에 대한 자세한 내용은 [이메일 흐름 관리](email-flows.md) 단원을 참조하십시오. Lambda에 대한 자세한 내용은 [https://docs.aws.amazon.com/lambda/latest/dg/welcome.html](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)를 참조하세요.

**참고**  
현재 Lambda 이메일 흐름 규칙은 구성 중인 Amazon WorkMail 조직 AWS 계정 과 동일한 AWS 리전 및의 Lambda 함수만 참조합니다.

## Amazon WorkMail AWS Lambda 용 시작하기
<a name="start-lambda"></a>

Amazon WorkMail AWS Lambda 에서 사용을 시작하려면에서 계정으로 [ 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 를 배포하는 것이 좋습니다. 이 함수에는 필요한 모든 리소스와 사용자를 위해 구성된 권한이 있습니다. 더 많은 예를 보려면 GitHub의 [amazon-workmail-lambda-templates](https://github.com/aws-samples/amazon-workmail-lambda-templates) 리포지토리를 참조하세요.

자체 Lambda 함수를 생성하기로 선택한 경우 AWS Command Line Interface ()를 사용하여 권한을 구성해야 합니다AWS CLI. 다음 예제 명령에서 사용하려면 다음을 수행합니다.
+ `MY_FUNCTION_NAME`을 Lambda 함수의 이름으로 바꿉니다.
+ `REGION`을 Amazon WorkMail AWS 리전으로 대체합니다. 사용 가능한 Amazon WorkMail 리전에는 `us-east-1`(미국 동부(버지니아 북부)), `us-west-2`(미국 서부(오레곤)) 및 `eu-west-1`(유럽(아일랜드))가 포함됩니다.
+ `AWS_ACCOUNT_ID`를 12자리 AWS 계정 ID로 바꿉니다.
+ `WORKMAIL_ORGANIZATION_ID`를 Amazon WorkMail 조직 ID로 대체합니다. 조직 페이지의 **조직** 카드에서 찾을 수 있습니다.



```
aws --region REGION lambda add-permission --function-name MY_FUNCTION_NAME 
--statement-id AllowWorkMail 
--action "lambda:InvokeFunction" 
--principal workmail.REGION.amazonaws.com
--source-arn arn:aws:workmail:REGION:AWS_ACCOUNT_ID:organization/WORKMAIL_ORGANIZATION_ID
```

사용에 대한 자세한 내용은 [https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html) AWS CLI참조하세요.

## 동기식 **Lambda 실행** 규칙 구성
<a name="synchronous-rules"></a>

동기식 **Lambda 실행** 규칙을 구성하려면 **Lambda 실행** 작업이 포함된 이메일 흐름 규칙을 생성하고 **동기식 실행** 확인란을 선택합니다. 메일 흐름 규칙 생성에 대한 자세한 내용은 [이메일 흐름 규칙 생성](create-email-rules.md) 단원을 참조하십시오.

동기식 규칙 생성을 완료하려면 Lambda Amazon 리소스 이름(ARN)을 추가하고 다음 옵션을 구성합니다.

****폴백 작업****  
Amazon WorkMail 작업은 Lambda 함수를 실행하지 못하면 적용됩니다. 이 작업은 **allRecipients** 플래그가 설정되지 않은 경우 Lambda 응답에서 생략된 모든 수신자에게도 적용됩니다. **폴백 작업**은 다른 Lambda 작업이 될 수 없습니다.

****규칙 제한 시간**(분)**  
Amazon WorkMail이 호출하지 못할 경우 Lambda 함수가 다시 시도되는 기간입니다. **폴백 작업**은 이 기간이 끝날 때 적용됩니다.

**참고**  
동기식 **Lambda 실행** 규칙은 **\$1** 대상 조건만 지원합니다.

## Lambda 이벤트 데이터
<a name="lambda-data"></a>

Lambda 함수는 다음 이벤트 데이터를 사용하여 트리거됩니다. 데이터 표시는 Lambda 함수에 사용되는 프로그래밍 언어에 따라 다릅니다.

```
{
    "summaryVersion": "2018-10-10",
    "envelope": {
        "mailFrom" : {
            "address" : "from@example.com"
        },
        "recipients" : [
           { "address" : "recipient1@example.com" },
           { "address" : "recipient2@example.com" }
        ]
    },
    "sender" : {
        "address" :  "sender@example.com"
    },
    "subject" : "Hello From Amazon WorkMail!",
    "messageId": "00000000-0000-0000-0000-000000000000",
    "invocationId": "00000000000000000000000000000000",
    "flowDirection": "INBOUND",
    "truncated": false
}
```

이벤트 JSON에는 다음 데이터가 포함됩니다.

**summaryVersion**  
`LambdaEventData`의 버전 번호입니다. `LambdaEventData`에서 이전 버전과 호환되지 않는 변경을 한 경우에만 업데이트됩니다.

**envelope**  
다음 필드가 포함된 이메일 메시지의 엔벌로프입니다.    
**mailFrom**  
**보낸 사람** 주소 - 일반적으로 이메일 메시지를 보낸 사용자의 이메일 주소입니다. 사용자가 다른 사용자로 또는 다른 사용자를 대신하여 이메일 메시지를 전송한 경우 **mailFrom** 필드는 이메일 메시지 전송을 위임한 사용자의 이메일 주소를 반환합니다(실제 발신자의 이메일 주소를 반환하지 않음).  
**recipients**  
모든 수신자 이메일 주소의 목록입니다. Amazon WorkMail은 **받는 사람**, **참조** 또는 **BCC**를 구분하지 않습니다.  
인바운드 이메일 흐름 규칙의 경우, 이 목록에는 규칙을 생성한 Amazon WorkMail 조직의 모든 도메인의 수신자가 포함됩니다. Lambda 함수는 각 SMTP 대화에 대해 발신자로부터 개별적으로 호출되고, 수신자 필드에는 SMTP 대화의 수신자가 나열됩니다. 외부 도메인의 수신자는 포함되지 않습니다.

**sender**  
다른 사용자를 대신하여 이메일 메시지를 전송한 사용자의 이메일 주소입니다. 이 필드는 다른 사용자를 대신하여 이메일 메시지를 전송할 때만 설정됩니다.

**subject**  
이메일 제목줄입니다. 256자 제한을 초과할 경우 잘립니다.

**messageId**  
Amazon WorkMail 메시지 흐름 SDK 사용 시 이메일 메시지의 전체 콘텐츠에 액세스할 때 사용되는 고유한 ID입니다.

**invocationId**  
고유한 Lambda 호출의 ID입니다. 이 ID는 동일한 **LambdaEventData**에 대해 Lambda 함수가 두 번 이상 호출되는 경우에도 동일하게 유지됩니다. 재시도를 감지하고 중복을 방지하는 데 사용합니다.

**flowDirection**  
이메일 흐름의 방향을 **INBOUND** 또는 **OUTBOUND**로 나타냅니다.

**truncated**  
제목 행 길이가 아니라 페이로드 크기에 적용됩니다. `true`인 경우 페이로드 크기가 128KB 제한을 초과하면 제한을 충족하기 위해 수신자 목록이 잘립니다.

## 동기식 **Lambda 실행** 응답 스키마
<a name="synchronous-schema"></a>

동기식 **Lambda 실행** 작업이 포함된 이메일 흐름 규칙이 인바운드 또는 아웃바운드 이메일 메시지와 일치하면 Amazon WorkMail이 구성된 Lambda 함수를 호출하고 응답을 기다린 후 이메일 메시지에 대해 작업을 수행합니다. Lambda 함수는 작업, 작업 유형, 적용 가능한 파라미터 및 작업이 적용되는 수신자를 나열하는 미리 정의된 스키마에 따라 응답을 반환합니다.

다음 예는 동기식 **Lambda 실행** 응답을 보여줍니다. 응답은 Lambda 함수에 사용되는 프로그래밍 언어에 따라 다릅니다.

```
{
    "actions": [                          
      {
        "action" : {                       
          "type": "string",                 
          "parameters": { various }       
        },
        "recipients": [list of strings],      
        "allRecipients": boolean            
      }
    ]
}
```

응답 JSON에는 다음과 같은 데이터가 포함됩니다.

**작업**  
수신자에 대해 수행할 작업입니다.

**type**  
작업 유형입니다. 비동기식 **Lambda 실행** 작업에 대해 작업 유형이 반환되지 않습니다.  
인바운드 규칙 작업 유형에는 **BOUNCE**, **DROP**, **DEFAULT**, **BYPASS\$1SPAM\$1CHECK** 및 **MOVE\$1TO\$1JUNK**가 포함됩니다. 자세한 내용은 [인바운드 이메일 규칙 작업](email-flows.md#email-flows-rule-actions) 단원을 참조하십시오.  
아웃바운드 규칙 작업 유형에는 **BOUNCE**, **DROP** 및 **DEFAULT**가 포함됩니다. 자세한 내용은 [아웃바운드 이메일 규칙 작업](email-flows.md#email-flows-rule-outbound) 단원을 참조하십시오.

**parameters**  
추가 작업 파라미터입니다. **BOUNCE** 작업 유형에 대해 **BounceMessage** 키 및 **string** 값이 포함된 JSON 객체로 지원됩니다. 이 반송 메일 메시지는 반송 이메일 메시지를 생성하는 데 사용됩니다.

**recipients**  
작업을 수행해야 하는 이메일 주소의 목록입니다. 원래 수신자 목록에 포함되지 않은 경우에도 새 수신자를 응답에 추가할 수 있습니다. **allRecipients**가 작업에 대해 true인 경우에는 이 필드가 필요하지 않습니다.  
인바운드 이메일에 대해 Lambda 작업이 호출되면 조직의 새 수신자만 추가할 수 있습니다. 새 수신자는 **숨은 참조**로 응답에 추가됩니다.

**allRecipients**  
true인 경우 Lambda 응답에서 다른 특정 작업이 적용되지 않는 모든 수신자에게 작업을 적용합니다.

### 동기식 **Lambda 실행** 작업 제한
<a name="synchronous-limits"></a>

Amazon WorkMail에서 동기식 **Lambda 실행** 작업에 대해 Lambda 함수를 호출할 때는 다음과 같은 제한이 적용됩니다.
+ Lambda 함수는 15초 내에 응답하거나 실패한 호출로 처리되어야 합니다.
**참고**  
시스템은 사용자가 지정한 **규칙 제한 시간** 간격 동안 간접 호출을 재시도합니다.
+ 최대 256KB의 Lambda 함수 응답이 허용됩니다.
+ 응답에는 최대 10개의 고유 작업이 허용됩니다. 10개 이상의 작업에는 구성된 **폴백 작업**이 적용됩니다.
+ 아웃바운드 Lambda 함수에는 최대 500명의 수신자가 허용됩니다.
+ **규칙 제한 시간**의 최대값은 240분입니다. 최소값 0이 구성되어 있으면 Amazon WorkMail이 폴백 작업을 적용하기 전에 다시 시도하지 않습니다.

### 동기식 **Lambda 실행** 작업 실패
<a name="synchronous-failures"></a>

Amazon WorkMail이 오류, 잘못된 응답 또는 Lambda 타임아웃으로 인해 Lambda 함수를 호출할 수 없는 경우, Amazon WorkMail은 지수 백오프를 사용하여 호출을 재시도하여 **규칙 제한 시간** 기간이 완료될 때까지 처리 속도를 줄입니다. 그런 다음 이메일 메시지의 모든 수신자에게 **폴백 작업**이 적용 됩니다. 자세한 내용은 [동기식 **Lambda 실행** 규칙 구성](#synchronous-rules) 단원을 참조하십시오.

## 동기식 **Lambda 실행** 응답 예
<a name="synchronous-responses"></a>

다음 예에서는 일반적인 동기식 **Lambda 실행** 응답의 구조를 보여줍니다.

**Example : 이메일 메시지에서 지정된 수신자 제거**  
다음 예에서는 이메일 메시지에서 수신자를 제거하기 위한 동기식 **Lambda 실행** 응답의 구조를 보여줍니다.  

```
{
    "actions": [
      {
        "action": {
          "type": "DEFAULT"
        },
        "allRecipients": true
      },
      {
        "action": {
          "type": "DROP"
        },
        "recipients": [
          "drop-recipient@example.com"
        ]
      }
    ]
}
```

**Example : 사용자 지정 이메일 메시지가 포함된 반송 메일**  
다음 예에서는 사용자 지정 이메일 메시지로 반송하기 위한 동기식 **Lambda 실행** 응답의 구조를 보여줍니다.  

```
{
    "actions" : [
      {
        "action" : {
          "type": 'BOUNCE',
          "parameters": {
            "bounceMessage" : "Email in breach of company policy."
          }
        },
        "allRecipients": true
      }
    ]
}
```

**Example : 이메일 메시지에 수신자 추가**  
다음 예에서는 이메일 메시지에 수신자를 추가하기 위한 동기식 **Lambda 실행** 응답의 구조를 보여줍니다. 이렇게 해도 이메일 메시지의 **받는 사람** 또는 **CC** 필드는 업데이트되지 않습니다.  

```
{
    "actions": [
      {
        "action": { 
          "type": "DEFAULT" 
        },
        "recipients": [
          "new-recipient@example.com"
         ]
      },
      {
        "action": { 
          "type": "DEFAULT" 
        },
        "allRecipients": true
      }
    ]
}
```

**Lambda 실행** 작업을 위한 Lambda 함수를 생성할 때 사용할 추가 코드 예제는 [Amazon WorkMail Lambda 템플릿](https://github.com/aws-samples/amazon-workmail-lambda-templates)을 참조하세요.

## Amazon WorkMail에서 Lambda 사용에 대한 자세한 내용
<a name="lambda-more"></a>

Lambda 함수를 트리거하는 이메일 메시지의 전체 콘텐츠에도 액세스할 수 있습니다. 자세한 내용은 [를 사용하여 메시지 콘텐츠 검색 AWS Lambda](lambda-content.md) 단원을 참조하십시오.

# 를 사용하여 메시지 콘텐츠 검색 AWS Lambda
<a name="lambda-content"></a>

Amazon WorkMail의 이메일 흐름을 관리하도록 AWS Lambda 함수를 구성한 후 Lambda를 사용하여 처리되는 이메일 메시지의 전체 콘텐츠에 액세스할 수 있습니다. Amazon WorkMail용 Lambda 시작하기에 대한 자세한 내용은 [Amazon WorkMail AWS Lambda 용 구성](lambda.md) 단원을 참조하세요.

이메일 메시지의 전체 콘텐츠에 액세스하려면 Amazon WorkMail Message Flow API에서 `GetRawMessageContent` 작업을 사용합니다. 호출 시 사용자의 Lambda 함수로 전달되는 이메일 메시지 ID가 API로 요청을 전송합니다. 그러면 API가 이메일 메시지의 전체 MIME 콘텐츠로 응답합니다. 자세한 내용은 [Amazon WorkMail API 참조](https://docs.aws.amazon.com/workmail/latest/APIReference/API_Operations_Amazon_WorkMail_Message_Flow.html)의 *Amazon WorkMail 메시지 흐름*을 참조하세요.

다음 예제는 Python 런타임 환경을 사용하는 Lambda 함수로 전체 메시지 콘텐츠를 검색하는 방법을 보여줍니다.

**작은 정보**  
에서 계정으로 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 함수에 비즈니스 로직을 추가할 수 있습니다.

```
import boto3
import email
import os

def email_handler(event, context):
    workmail = boto3.client('workmailmessageflow', 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())
    print(parsed_msg)
```

전송 중인 메시지의 콘텐츠를 분석하는 자세한 방법은 GitHub의 [amazon-workmail-lambda-templates](https://github.com/aws-samples/amazon-workmail-lambda-templates) 리포지토리를 참조하십시오.

**참고**  
Amazon WorkMail Message Flow API는 전송 중인 이메일 메시지에 액세스하는 데만 사용합니다. 전송 또는 수신 후 24시간 이내에만 메시지에 액세스할 수 있습니다. 사용자의 메일박스의 메시지에 프로그래밍 방식으로 액세스하려면 Amazon WorkMail에서 지원하는 다른 프로토콜 중 하나를 사용합니다(예: IMAP 또는 EWS(Exchange Web Services)).

# AWS Lambda를 사용하여 메시지 콘텐츠 업데이트
<a name="update-with-lambda"></a>

이메일 흐름을 관리하도록 동기 AWS Lambda 함수를 구성한 후 Amazon WorkMail 메시지 흐름 API의 `PutRawMessageContent` 작업을 사용하여 전송 중 이메일 메시지의 콘텐츠를 업데이트할 수 있습니다. 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 리전으로 대체하세요.

**작은 정보**  
AWS Serverless Application Repository에서 사용자 계정으로 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)를 배포하는 것으로 시작하면 시스템에서 필요한 리소스와 권한을 포함하는 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(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 런타임을 사용하여 전송 중인 이메일 메시지의 제목을 업데이트하는 방법을 보여줍니다.

```
    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) 리포지토리를 참조하세요.