Open5

Django on herokuでメール送信できるようにしたい

KeiKei

やりたいこと

  • HerokuにデプロイしたDjangoアプリにおいて、対象のアドレスにメール配信する
  • Herokuのアドオンが提供されている、下記が候補
KeiKei

1. SendGridのアドオン追加

コマンドからSendGridアドオンを追加する

heroku addons:create sendgrid:starter

追加できたら、Heroku管理画面に下記のように表示される

アドオンをクリックすると、情報の入力が聞かれる

個人利用である旨を記載、ウェブサイトにはXのリンクを乗っけといた

SendGridのダッシュボードが立ち上がる(下記コマンドでも可能)

heroku addons:open sendgrid

参考

https://elements.heroku.com/addons/sendgrid

KeiKei

2. SendGridの設定

とりあえずアドオンを追加できたので、公式の手順に従って、設定をすすめていく。

Two-factor authentication (2FA) の設定

  • ダッシュボード上で見当たらなかったので飛ばす

APIキーの作成

  • [Settings] > [API Keys]で作成画面が表示されるので、「Create API Key」をクリック

  • APIキーの名前とアクセス権を設定する

    • キー名は任意、アクセス権は「Full Access」とした
  • APIキーが表示されるのでメモっておく(※二度と表示されないので注意)

  • APIキーが作成されるとこんな感じ

Senderの設定

  • [settings] > [Single Authentication]で、Senderの作成画面を開く
    • とりあえず自身のメールアドレス等を設定して、「Create」ボタンをクリックする

上記で設定したアドレスに認証メールが届くので、
「Verify Single Sender」をクリックして、認証が通ると下記画面が表示される

参考

https://devcenter.heroku.com/articles/sendgrid

KeiKei

3. 環境変数の設定

APIキーの発行ができたら、Herokuの環境変数に設定する。

今回はherokuCLIから設定する(-a以降はなくてもいい)

heroku config:set SENDGRID_API_KEY=[作成したAPIキー] -a [アプリ名]

ダッシュボードにも反映済み

準備は整ったので、APIを使用したメール配信処理の実装を進める

参考

https://anymail.dev/en/stable/esps/sendgrid/
https://devcenter.heroku.com/articles/sendgrid#api-keys-as-configuration-variables

KeiKei

4. メール送信処理の実装

Django公式のフォーラムを確認したところ、Anymailが良さげなのでこちら採用してみる。

Anymailの導入

こちらを見ながら、Anymailのセットアップを進める

  • まずはAnymailをインストールする
terminal
pip install "django-anymail[sendgrid]"
  • setttings.pyに下記設定を記載する
settings.py
INSTALLED_APPS = [
    # ...
    "anymail",
    # ...
]
EMAIL_BACKEND = "anymail.backends.sendgrid.EmailBackend"
ANYMAIL = {
    ...
    "SENDGRID_API_KEY":  env("SENDGRID_API_KEY")
}

参考

https://anymail.dev/en/stable/esps/sendgrid/
https://anymail.dev/en/stable/
https://forum.djangoproject.com/t/django-sendgrid-integration-on-heroku/6909