本記事では、AWSのメールサービス「Amazon Simple Email Service (SES)」を使ってDjangoアプリでメール配信を行う方法を紹介します。
専用のライブラリを使用すると、数行で設定できるので非常におすすめです。
Amazon SESとは
AWSが提供する高可用性のクラウドメール送信サービス。
メールサーバー立てなくてもちょっと設定すればすぐに導入できる優れもの。
SDKを通して普通のEメールと同様に宛先・本文・添付ファイルなどを指定してEメールを送ることができる。
価格も1,000 通あたり0.10 USD≒10円。
EC2でホストしているアプリから Amazon SES を呼び出した場合、月に62,000通のメッセージまでは無料で送信可能(無期限)
各種制限に関しては以下を↓
Amazon SES側の設定
基本的に何も難しい設定はないのでここではざっくり説明します。
1. 配信用のメールを登録
配信に使用するメールアドレスを登録します。
リージョンは「バージニア北部」にすることをおススメします。
他のリージョンで設定してもなぜか上手く送信できない報告が多いからです。
2. テストメールを送信
メールアドレスを登録するとテストメールを送信するアクションが現れるので実行し、設定できているか確認します。
3. 送受信制限解除の申請
SESは初め、サンドボックス制限状態となっており、送信者・受信者のメールアドレスのドメインは全て検証されている必要がある状態になっています。
任意の宛先にSESからEメールを送りたい場合はAWSサポートセンターからサンドボックス制限の解除申請を行います。
Django側の設定
Django-sesライブラリのインストール
Django×Amazon SESでデファクトのライブラリであるDjango-sesを使用します。
このライブラリは、SES用のメールバックエンドです。
pip install django-ses
また、Django-sesはbotoというAWS APIのラッパーを使うので、インストールしていない方はインストールが必要です。
pip install --upgrade boto3
設定ファイルにバックエンドの設定を追加
INSTALLED_APPS = [
...
'django_ses', # 追加
]
AWS_ACCESS_KEY_ID = 'your access key'
AWS_SECRET_ACCESS_KEY = 'your secret key'
EMAIL_BACKEND = 'django_ses.SESBackend' # バックエンドをSESに変更
AWS_SES_REGION_NAME = 'your ses reagion name'
AWS_SES_REGION_ENDPOINT = 'email.us-east-1.amazonaws.com' # デフォルトはこれでok
これでSESの設定は完了です。
試しにメールを送ってみましょう。
メール送信
以下は一番シンプルなメール送信関数です。
from django.core.mail import send_mail, EmailMessage
def send_email():
subject = 'タイトル'
message = '本文'
from_email = '送信元アドレス'
to_emails = ['送信先アドレス']
email = EmailMessage(
subject,
message,
from_email,
to_emails
)
email.send()
この関数を呼び出すだけでメールを送信できます。
Django標準のライブラリと併用することでさらにリッチなコンテンツをメールで送ることもできます。
その内容は別記事で載せたいと思います。
以上、DjangoとAmazon SESでメール送信の方法を紹介しました。
興味があれば一度試しにやってみてください。