✉️
Amazon SESでメール送信の設定・実装例
公開
2024-12-18
文章量
約1875字
はじめに
Amazon Simple Email Service (Amazon SES) は、AWS が提供する手軽にメールを配信できるサービスです。 類似のサービスとして SendGrid がありますが、AWS 環境で構築を進める場合には、Amazon SES を使うとスムーズに始められます。
この記事では、Python を使用して Amazon SES を実行する手順を紹介します。
IDの作成
Amazon SES のコーンソールページにアクセス
左側のメニューから 「設定」の「ID」 を選択
右上「ID の作成」 ボタンをクリック
「ID タイプ」 を「ドメイン」に指定して、「ドメイン」項目に自分のドメインを入力(今回の例では、
yard.tips
を入力)「ドメインの検証」部分で「Easy DKIM」を選択、「DKIM署名キーの長さ」を「RSA_2048_BIT」に、 「DNS レコードのRoute53への発行」と「DKIM署名」を有効化
詳細は以下の画像のようになります。


サンドボックスの解除
SESでは、デフォルトでサンドボックス機能が有効になっています。
この状態だと、認証済みのメールアドレスにしかメールを送ることができます。
この機能を解除し任意のメールアドレスにメールを送るためには、「本稼働アクセスのリクエスト」を行いAWSのサポートから承認を受ける必要があります。
SESのコンソールの左メニューの「アカウントダッシュボード」を選択し、サンドボックスの解除の申請を行います。
「メールタイプ」で「マーケティング」か「トランザクション」を選択
「ウェブサイトのULR」を入力
「ユースケース」の説明の入力
を行い申請の「リクエストを送信」します。
私の場合、初回はリジェクトされてしまいましたが、サポートに問い合わせて利用用途と一日の送信数を丁寧に伝えたら承認されました。
メールの送信
PythonからSESを利用する際はboto3のモジュールをインストールする必要があります。
pip install boto3
AWS lambdaで宛先、件名、本文をパラメータで渡して、メール送信するコードは以下のようになります。
import os
import boto3
def lambda_handler(event, context):
client = boto3.client("ses", "ap-northeast-1")
# メールの送信元、送信先、件名、本文を定義
sender_email = "info@yard.tips"
recipient_email = event["recipient_email"]
subject = event.get("subject")
body_text = event.get("body")
try:
response = client.send_email(Source=sender_email, Destination={"ToAddresses": [recipient_email]}, Message={"Subject": {"Data": subject}, "Body": {"Text": {"Data": body_text}}})
return {"statusCode": 200, "body": f"Email sent successfully to {recipient_email}!"}
except Exception as e:
return {"statusCode": 500, "body": f"Failed to send email: {str(e)}"}
なお、Lambda で Amazon SES のアクセス権限を付与する場合、以下のような設定をIAMロールに追加する必要があります。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ses:SendEmail",
"Resource": "*"
}
]
}
さいごに
AWS SESは、AWS環境から気軽にメールを送る際にとても便利です。
他のAWSサービスと組み合わせて、柔軟なシステム構築を実現しましょう。