Help us understand the problem. What is going on with this article?

Django + SendGrid でメールを送信

背景

Djangoサイトでメールを送ろうとしていたのですが、Gmailではなぜかうまく動かなかったので、その代わりにSendGridでメールを送ってみようと思いました。

前提条件

  • Djangoでプロジェクトを作成済み
  • 使用中のDNSホストでCNAMEなどの設定の仕方が分かる

手順

SendGridアカウントの登録

  1. SendGridで無料のアカウントを作成する
    日本のSendGridアカウントを作成すると、審査に2日ぐらいかかる可能性あり。アメリカ版ならすぐに作成可能。ちなみに、この時に入力するメールアドレスはアカウント作成用のものなのでなんでもいい)

  2. 認証メールを開く

  3. ドメインの認証を行う。
    英語版ではSendgridのサイトの左側のナビバーにある"Settings"タブを開くとある"Sender Authentication"のページからできます。私はGoogle DomainsをDNSホストとして使っていたのですが、これがプルダウンメニューにあるGoogle Cloudにあたるのか分からなかったので、"Other Hosts"を選んで"Google Domains"と入力しました。Djangoから送信する送信元アドレスに"…@sendgrid.net"でなく、独自のドメインを使いたい場合はYesにチェック。

  4. 次の画面では自分のドメイン("hogehoge.com")などを入力

  5. 最後に出てくるDNS関連情報を自分が使っているDNSホストのページにコピー&ペースト。
    ここで注意するのが、"DNS NAME"をペーストするときに自分のドメイン("hogehoge.com")の部分を削除しておく必要があることです。DNSホストにCNAMEを登録したら数分待ち、Verifyボタンを押して認証しましょう。

  6. 5が終わったらAPI Keyを入手しましょう。
    先ほどの"Settings"タブから"API Keys"を選び、"Create API Keys"でAPI Key作成します。"Restricted Access"を選んで、"Mail Send"の権限を与えます。

Django側の設定

Sendgrid側の設定が終わったら、次はDjangoの設定をします。今回はsmtpではなく、sendgridのWEB APIを通してメールを送信します。

  1. virtualenvに入って、pipでdjango-sendgrid-v5をインストールします。
    pip install django-sendgrid-v5

  2. Environment variableにAPI keyを追加。
    export SENDGRID_API_KEY="先ほど作ったAPI key"

  3. settings.pyに以下を追加します。
    `import os
    EMAIL_BACKEND = "sendgrid_backend.SendgridBackend"
    SENDGRID_API_KEY = os.environ.get("SENDGRID_API_KEY")
    SENDGRID_SANDBOX_MODE_IN_DEBUG= False #DEBUG modeがTrueの場合にサンドボックスモードを起動/停止する設定。
    DEFAULT_FROM_EMAIL = 'admin@hogehoge.com'

サンドボックスモードはデフォルトでTrueになっているため、明示的にこれをFalseに設定しないと実際のメールは送られません。
ではテストしてみましょう。

メールの送信

Djangoのシェルからメールを送ってみます。

`python3 manage.py shell

from django.core.mail import send_mail
send_mail('testing', 'my message', 'admin@hogehoge.com', ['宛先@example.com'], fail_silently=False)
1`

これで宛先にメールが届くはずです。
ちなみに私の場合、outlook.comのメール宛に送信したメールはブロックされていました。
さらにGmailの方はSpamフォルダに入っていました。

初めての記事なので、いたらないところもあると思いますが、自分のための備忘録として今回は書かせてもらいました。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away