【Python】Amazon SESでメール配信をする

アイキャッチ画像
  • Amazon SESを利用してメール配信をするには?
  • Pythonを使ってAmazon SESを操作するには?

本記事ではこのような疑問を解決します。


Webアプリケーション開発においてメール配信機能はほぼ必須の機能でしょう。

しかし、メール配信機能を実装する際には、SMTPサーバーを立てたり、ドメイン認証を行なったり、といった作業が必要になります。

そんな面倒なことを簡単にしてくれるのがAmazon SESです。


そこで今回はAmazon SESの使い方(Python編)をわかりやすく解説していきます。

そもそもAmazon SESとは?

Amazon SES(Simple Email Service)とはAmazonが提供するフルマネージド型のメール配信サービスのことで、以下のようなメリットがあります。

・自前でSMTPサーバーを構築・管理する必要がない

・送信ドメイン認証によって「なりすましメール」の判定を避けることができる

・費用が安い

それでは次から実際にPythonからAmazon SES経由でメール配信をする手順を見ていきましょう。

手順①:ドメインを準備する

まずはメールアドレスに使用するドメインを準備しましょう。

今回は同じAmazonのサービスであるRoute 53にてドメインの取得を行います。

※単一のメールアドレスの場合
単一のメールアドレスを用意するだけでも、SESにおいてメール配信は可能です。
その場合はSESに登録したメールアドレス宛に認証用URLが送られるので、クリックして認証するだけでメール配信ができるようになります。

それでは実際にRoute 53にてドメインを取得しましょう。

以下の操作でドメインの取得ができます。

・[ドメイン]→[登録済みドメイン]を選択する

・[ドメインの登録]を選択する

・ドメイン名の検索窓に取得したいドメイン名を入れて[チェック]をクリックする

・利用可能なドメインであれば、[カートに入れる]をクリックする

・ドメイン登録者の連絡先を入力する

・各種必要事項の入力やチェックを行うことでドメインの取得が完了する

なお、より詳しいことはこちらの記事で解説しているのでご参考ください。

関連記事

Route 53を使って独自ドメインを取得するには?取得した独自ドメインとIPアドレスの紐付けをするには? 本記事ではこのような疑問を解決します。ブログやサイト運営をはじめる場合、独自ドメインを取得し、そのドメインとIPア[…]

アイキャッチ画像

手順②:Amazon SESでドメイン検証を行う

次にSESにおいて取得したドメインの検証を行います。

SESのダッシュボードにおいて以下の操作を行いましょう。

・[Configuration]→[Verified identities]を選択する

・[Create identity]をクリックする

・「Identity type」を「Domain」にして必要事項を入力していく

・SESでのドメイン検証が完了すると、Route 53においてDNSレコード(CNAME)が自動で追加される

※サンドボックス外への移動
新しいAmazon SESアカウントにはサンドボックスと呼ばれる一定の制限が適用されています。
サンドボックス内では「受信者のメールアドレスが検証済みでないと、そのユーザーにメールを送信することはできない」などの制限があります。
そのため、Webアプリケーションを本格的に運用していくにはサンドボックス外へ移動したほうが良いでしょう。
サンドボックス外へ移動するには、SESの利用目的やメールアドレスの管理方法などをAWS側に申請して、承認される必要があります。
ただ、サンドボックス内においてもメール検証などの必要な処理をすれば、メール配信機能としては十分な場合もあるでしょう。

手順③:PythonでAmazon SESを操作する

ライブラリをインストールする

PythonでAWSの各種サービスを操作するためにboto3をインストールします。

boto3とは「AWS SDK for Python」のことで、AWSの各種サービスをPythonから操作するためのライブラリです。

ターミナル等において以下のコマンドを実行します。

$ pip install boto3

処理を記述する

最後にPythonでAmazon SESを操作してメール配信をする処理を記述します。

今回はメール配信に必要な最低限のコードのみをご紹介します。

def send_email(to_address, subject_data, body_text_data):# 引数(送信先メールアドレス、件名、本文)
    client = boto3.client('ses')
    client.send_email(
            Source = '【検証済みドメインのメールアドレス】',
            Destination = {
                'ToAddresses': [
                    to_address,
                ]
            },
            Message = {
                'Subject': {
                    'Data': subject_data,
                    'Charset': 'UTF-8'
                },
                'Body': {
                    'Text': {
                        'Data': body_text_data,
                        'Charset': 'UTF-8'
                    }
                }
            }
        )

なお、さらに詳しい処理についてはboto3公式ドキュメントにおけるAmazon SESの部分をご参考ください。

boto3公式ドキュメント(Amazon SES)

まとめ

以上がPythonによるAmazon SESでのメール配信の方法になります。

基本的な流れは以下の通りです。

①ドメインを準備する
→Route 53にてドメインを取得する

②Amazon SESでドメイン検証を行う
→SESでのドメイン検証後、Route 53にてDNSレコード(CNAME)が追加される

③PythonでAmazon SESを操作する
→boto3を使ってSESを操作する

なお、boto3公式ドキュメント(Amazon SES部分)にあるメソッド等を活用することで、
それぞれにのWebアプリケーションに合った機能を実装することができます。

ぜひお試しください!