1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Django + SendGrid でメールを送信

Posted at

背景

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フォルダに入っていました。

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

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?