概要
DjangoでAmazon SESを使ってメール送信する方法を検証したので、手順を残しておく。
※ あくまで検証用の手順です。I AMの設定やメール送信時のエラーハンドリングは考慮していません。
前提
「django-ses」というパッケージを使用する。
github.com
AWS側の設定
2.テスト配信用のメールアドレスを認証する。
SESをサンドボックス内で使用している場合は、テスト配信用のメールアドレスを認証しておく必要がある。
・手順
Email Address > Verify a New Email Address
※ 初期状態では、サンドボックス内での利用になっている。
サンドボックスを削除する場合はAWSに申請を出す必要がある。
詳細は以下の公式ドキュメントを参照
docs.aws.amazon.com
3.テストメールを送信してみる。
コンソール上から、テスト配信用のメールアドレスにメールを送信できることを確認しておく。
・手順
Email Address > 対象のメールアドレスを選択 > Send a Test Email
4.専用のユーザーを作成する。
DjangoからSESにアクセスする専用のユーザーを作成する。
①「I AM」のトップページにアクセスする。
②「ユーザー」 > 「ユーザーの追加」を選択する。
③任意のユーザー名を入力して、「プログラムによるアクセス」をチェックして「次のステップ: アクセス制限」を押す。
④「既存のポリシーを直接アタッチ」を選択して、「AdministratorAccess」をチェックして、「次のステップ: タグ」を押す。
⑤何も入力せずに「次のステップ: 確認」を押す。
⑥「ユーザーの作成」を押す。
⑦「アクセスキー ID」と「シークレットアクセスキー」を控える。
成功画面が表示される。
「アクセスキー ID」と「シークレットアクセスキー」はDjango側の設定で必要になるので、ブラウザを閉じないようにしておくか、CSVファイルをダウンロードする。
※ 一度ブラウザを閉じてしまうと再確認する方法がないので注意。
Django側の設定
2. 「settings.py」のINSTALLED_APPS
に「django_ses」を追加する。
INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "django_ses" #追加 ]
3.「settings.py」に以下の定数を追加する。
AWS_ACCESS_KEY_ID = "${アクセスキー ID}" AWS_SECRET_ACCESS_KEY = "${シークレットアクセスキー}" AWS_SES_REGION_NAME="us-west-2" #SESのリージョンにオレゴン以外を使用している場合は読み替える。 AWS_SES_REGION_ENDPOINT="email.us-west-2.amazonaws.com" #SESのリージョンにオレゴン以外を使用している場合は読み替える。 EMAIL_BACKEND = "django_ses.SESBackend"
4. メール送信処理
例えば、「views.py」に以下のように記載する。
from django.http import HttpResponse from django.core.mail import send_mail, EmailMessage def index(request): subject = "テストメール" message = "テストメールです。" from_email = "no-reply <no-reply@example.com>" recipient_list = ["fizz@example.com", "buzz@example.com"] email = EmailMessage(subject, message, from_email, recipient_list) email.send() return HttpResponse("Email sent.")
→ 該当のURLにリクエストすると、メールが送信されるはず。
※ 以下の公式のgithubリポジトリの「example」というディレクトリ配下にサンプルコードが存在するので、これを参考にするのがよい。
github.com
以上