Django×Amazon SESで簡単にメールを送信

desk6 CODE

本記事では、AWSのメールサービス「Amazon Simple Email Service (SES)」を使ってDjangoアプリでメール配信を行う方法を紹介します。

専用のライブラリを使用すると、数行で設定できるので非常におすすめです。

 

Amazon SESとは

Amazon SES

AWSが提供する高可用性のクラウドメール送信サービス

メールサーバー立てなくてもちょっと設定すればすぐに導入できる優れもの。

SDKを通して普通のEメールと同様に宛先・本文・添付ファイルなどを指定してEメールを送ることができる。

価格も1,000 通あたり0.10 USD≒10円

EC2でホストしているアプリから Amazon SES を呼び出した場合、月に62,000通のメッセージまでは無料で送信可能(無期限)

 

各種制限に関しては以下を↓

Amazon SES の Service Quotas - Amazon Simple Email Service
Amazon SES のリソースとオペレーションに適用されるクォータの一覧を示して説明します。

 

Amazon SES側の設定

基本的に何も難しい設定はないのでここではざっくり説明します。

1. 配信用のメールを登録

配信に使用するメールアドレスを登録します。

リージョンは「バージニア北部」にすることをおススメします。

他のリージョンで設定してもなぜか上手く送信できない報告が多いからです。

 

2. テストメールを送信

メールアドレスを登録するとテストメールを送信するアクションが現れるので実行し、設定できているか確認します。

 

3. 送受信制限解除の申請

SESは初め、サンドボックス制限状態となっており、送信者・受信者のメールアドレスのドメインは全て検証されている必要がある状態になっています。

任意の宛先にSESからEメールを送りたい場合はAWSサポートセンターからサンドボックス制限の解除申請を行います。

Amazon SES サンドボックス外への移動 - Amazon Simple Email Service
アカウントを Amazon SES サンドボックス外に移動し、送信クォータを引き上げます。

 

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でメール送信の方法を紹介しました。

興味があれば一度試しにやってみてください。