Lambda와 Amazon SES를 사용하여 이메일을 보내려면 어떻게 해야 하나요?

4분 분량
0

AWS Lambda를 사용하여 Amazon Simple Email Service(Amazon SES)를 통해 이메일을 보내려고 합니다.

간략한 설명

Amazon SES를 사용하여 Lambda 함수에서 이메일을 보내려면 다음 단계를 완료하세요.

1.    Lambda에서 API 호출을 실행할 AWS Identity and Access Management(IAM) 정책 및 실행 역할을 생성합니다.

2.    Amazon SES ID(도메인 또는 이메일 주소)를 확인합니다.

3.    Amazon SES를 통해 이메일을 보내는 논리가 포함된 Lambda 함수를 생성하거나 업데이트합니다.

참고: 이메일에 PDF 첨부 파일을 포함하려면 Amazon SES SendRawEmail API 작업을 사용해야 합니다. 자세한 내용은 GitHub에서 Amazon SES API를 사용하여 원시 이메일 보내기를 참조하세요.

해결 방법

참고: 이 문서에 포함된Node.js, PythonRuby Lambda 함수 코드 예시는 사용 사례에 맞게 수정해야 합니다. 예시를 사용 사례에 맞게 조정하거나 선호하는 프로그래밍 언어로 직접 설계하세요.

Lambda가 API 호출을 실행하기 위한 IAM 정책 및 실행 역할 생성

1.    JSON 정책 편집기를 사용하여 IAM 정책을 생성합니다. 정책을 생성할 때 다음 JSON 정책 문서를 정책 편집기에 붙여 넣습니다.

{
 "Version": "2012-10-17",
 "Statement": [
 {
 "Effect": "Allow",
 "Action": [
 "ses:SendEmail",
 "ses:SendRawEmail"
 ],
 "Resource": "*"
 }
 ]
}

참고: 이 정책에 대한 액세스를 제한하는 자세한 방법과 예시는 Amazon SES를 위한 IAM 정책 예시를 참조하세요.

2.    IAM 정책을 IAM 역할에 연결합니다. 지침은 IAM ID 권한 추가(콘솔)에서 ID에 대한 권한 정책으로 관리형 정책 사용(콘솔) 섹션을 참조하세요.

참고: 다음 단계에서 이 IAM 역할을 Lambda 함수에 할당하세요.

Amazon SES ID(도메인 또는 이메일 주소) 확인

도메인을 확인하려면 DNS 공급자로 DKIM 도메인 ID 확인을 참조하세요.

이메일 주소를 확인하려면 이메일 주소 ID 확인을 참조하세요.

Amazon SES를 통해 이메일을 보내는 논리가 포함된 Lambda 함수를 생성하거나 업데이트

1.    아직 생성하지 않은 경우 Lambda 함수를 생성합니다.

참고: Lambda 콘솔을 사용하거나 배포 패키지를 구축 및 업로드하여 Lambda 함수를 생성할 수 있습니다.

2.    Lambda 콘솔의 왼쪽 탐색 창에서 함수를 선택합니다.

3.    함수 이름을 선택합니다.

4.    구성 탭의 권한 창에서 함수의 실행 역할을 살펴봅니다. 이전에 생성한 Amazon SES 권한이 있는 IAM 역할이 나열되는지 확인합니다. 올바른 IAM 역할이 목록에 없으면 함수에 올바른 역할을 할당합니다.

5.    함수 코드 아래의 편집기 창에서 다음 함수 코드 예시 중 하나를 붙여 넣습니다. Node.js, Python 또는 Ruby의 런타임 및 버전에 맞는 관련 예시를 사용해야 합니다.

중요: us-west-2를 확인된 Amazon SES ID가 있는 AWS 리전으로 바꿉니다. **"RecipientEmailAddress", ...**를 이메일을 보내려는 이메일 주소로 바꿉니다. SourceEmailAddress를 Amazon SES에서 확인된 발신자 이메일 주소 또는 Amazon SES에서 확인된 도메인의 이메일 주소로 바꿉니다. 필요에 따라 메시지 본문("Test")과 제목 줄("Test Email")을 편집합니다.

Node.js 버전 18 이상의 경우, 다음 코드 예시를 참조하세요.

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses";
const ses = new SESClient({ region: "us-west-2" });

export const handler = async(event) => {
  const command = new SendEmailCommand({
    Destination: {
      ToAddresses: ["RecipientEmailAddress", ...],
    },
    Message: {
      Body: {
        Text: { Data: "Test" },
      },

      Subject: { Data: "Test Email" },
    },
    Source: "SourceEmailAddress",
  });

  try {
    let response = await ses.send(command);
    // process data.
    return response;
  }
  catch (error) {
    // error handling.
  }
  finally {
    // finally.
  }
};

Node.js 버전 16 이상의 경우, 다음 코드 예시를 참조하세요.

// Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

var aws = require("aws-sdk");
var ses = new aws.SES({ region: "us-west-2" });
exports.handler = async function (event) {
  var params = {
    Destination: {
      ToAddresses: ["RecipientEmailAddress", ...],
    },
    Message: {
      Body: {
        Text: { Data: "Test" },
      },

      Subject: { Data: "Test Email" },
    },
    Source: "SourceEmailAddress",
  };

  return ses.sendEmail(params).promise()
};

Python 버전 3.9의 경우, 다음 코드 예시를 참조하세요.

import json
import boto3

client = boto3.client('ses', region_name='us-west-2')

def lambda_handler(event, context):

    response = client.send_email(
    Destination={
        'ToAddresses': ['RecipientEmailAddress']
    },
    Message={
        'Body': {
            'Text': {
                'Charset': 'UTF-8',
                'Data': 'This is the message body in text format.',
            }
        },
        'Subject': {
            'Charset': 'UTF-8',
            'Data': 'Test email',
        },
    },
    Source='SourceEmailAddress'
    )

    print(response)

    return {
        'statusCode': 200,
        'body': json.dumps("Email Sent Successfully. MessageId is: " + response['MessageId'])
    }

Ruby 버전 2.7의 경우, 다음 코드 예시를 참조하세요.

require "aws-sdk-ses"

$ses = Aws::SES::Client.new(region: "us-west-2")

def lambda_handler(event:, context:)

  resp = $ses.send_email({
  destination: {
    to_addresses: ["RecipientEmailAddress"],
  },
  message: {
    body: {
      text: {
        charset: "UTF-8",
        data: "This is the message body in text format.",
      },
    },
    subject: {
      charset: "UTF-8",
      data: "Test email",
    },
  },
  source: "SourceEmailAddress"
})
    { statusCode: 200, body: JSON.generate("Message Sent Successfully. #{resp.to_h} ") }
end

sendEmail API 사용에 대한 자세한 내용은 JavaScript, Python, RubyJava V2용 AWS SDK 설명서를 참조하세요.

6.    배포를 선택합니다.

(선택 사항) 테스트 이메일 보내기

1.    Lambda 콘솔에서 함수를 위한 테스트 이벤트를 구성합니다.

참고: 테스트 페이로드는 필수이지만 이 코드 예시에는 사용되지 않습니다.

2.    테스트를 선택합니다. Lambda는 Amazon SES를 사용하여 수신자에게 테스트 이메일을 보냅니다.

관련 정보

Amazon SES를 사용하여 이메일 보내기

Amazon SES의 Identity and Access Management

AWS 공식
AWS 공식업데이트됨 일 년 전