AWSLambda를 사용하여 메시지 콘텐츠 업데이트 - Amazon WorkMail

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

AWSLambda를 사용하여 메시지 콘텐츠 업데이트

이메일 흐름을 관리하도록 동기 AWS Lambda 함수를 구성한 후 Amazon Message API Flow의 PutRawMessageContent 작업을 사용하여 전송 중인 이메일 WorkMail 메시지의 콘텐츠를 업데이트할 수 있습니다. WorkMailAmazon용 Lambda 함수를 시작하는 방법에 대한 자세한 내용은 을 참조하십시오. 동기식 Lambda 실행 규칙 구성 에 대한 자세한 내용은 API 을 참조하십시오. PutRawMessageContent

참고

boto3 1.17.8이 PutRawMessageContent API 필요합니다. 그렇지 않으면 Lambda 함수에 계층을 추가할 수 있습니다. 올바른 boto3 버전을 다운로드하려면 의 boto 페이지를 참조하십시오. GitHub 계층 추가에 대한 자세한 내용은 계층을 사용하도록 함수 구성을 참조하세요.

예제 계층: "LayerArn":"arn:aws:lambda:${AWS::Region}:489970191081:layer:WorkMailLambdaLayer:2". 이 예시에서는 ${AWS::Region}을 us-east-1과 같은 적절한 AWS 리전으로 대체하세요.

작은 정보

먼저 서버리스 AWS 애플리케이션 리포지토리에서 Amazon WorkMail Hello World Lambda 함수를 계정에 배포하면 시스템이 필요한 리소스 및 권한을 포함하는 Lambda 함수를 사용자 계정에 생성합니다. 그런 다음 사용 사례에 따라 Lambda 함수에 비즈니스 로직을 추가할 수 있습니다.

진행하면서 다음 사항을 기억해야 합니다.

  • 를 사용하여 원본 메시지 콘텐츠를 검색할 GetRawMessageContentAPI수 있습니다. 자세한 정보는 를 사용하여 메시지 콘텐츠 검색 AWS Lambda 섹션을 참조하세요.

  • 원본 메시지를 찾았으면 MIME 내용을 변경하십시오. 작업을 마치면 계정의 Amazon Simple Storage Service(S3) 버킷에 메시지를 업로드합니다. S3 버킷이 Amazon WorkMail 작업과 AWS 계정 동일한 것을 사용하고 API 호출과 동일한 AWS 지역을 사용하는지 확인하십시오.

  • Amazon에서 요청을 WorkMail 처리하려면 S3 버킷에 올바른 정책이 있어야 S3 객체에 액세스할 수 있습니다. 자세한 내용은 Example S3 policy 단원을 참조하십시오.

  • PutRawMessageContentAPI를 사용하여 업데이트된 메시지 콘텐츠를 Amazon으로 다시 보낼 수 WorkMail 있습니다.

참고

PutRawMessageContentAPI이를 통해 업데이트된 메시지의 MIME 내용이 표준과 RawMessageContent데이터 유형에 언급된 RFC 기준을 충족하는지 확인할 수 있습니다. Amazon WorkMail 조직으로 인바운드되는 이메일이 항상 이러한 표준을 충족하는 것은 아니므로 PutRawMessageContent API 거부될 수 있습니다. 이러한 경우 반환된 오류 메시지를 참조하여 문제 해결 방법에 대한 자세한 내용을 확인할 수 있습니다.

예제 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