今回はMailgunを使ってDjangoのWebアプリからメールを送信する方法を解説します。
Djangoのアプリを既に作成してドメインも取得済みの前提で解説します。

💁‍♀️

postfixで自作のメールサーバーを構築してみたけど、大変だったのでMailgunを使うことにしました。

    Strory
  1. Mailgunの設定
  2. Djangoの設定
  3. まとめ

Mailgunの設定

まずは下記のURLの右上にあるstart sendingボタンからMailgunのアカウントを作成します。

https://www.mailgun.com/

Mailgunのトップページ

アカウントを作成し終わった後、ログインしてダッシュボードに行きます。
左のメニューにDomainがあるので、クリックして右上のAdd New Domainから送信元にしたいメールのドメインを登録します。

Mailgunのダッシュボード

Mailgunのダッシュボード

Add New DomainをクリックするとDomain nameを要求されるので、メールのドメイン(@以降)を登録してください。

次にドメインのDNS設定を行います。
ドメインのDNS設定をしてあるページに行き、2の送信用のDNSレコードと3のトラッキング用のDNSレコードをそれぞれ登録します。
2の下のMXレコードは登録が推奨されていますが、必須ではありません。

DNSのレコードが完了したら少し待ってからVerify DNS settingsボタンをクリックして、
認証されたらMailgunの設定は完了です。

最後に左のメニューのDomain settingsからSMTP credentialsタブをクリックします。
先ほど登録したドメインのSMTPの設定が表示されるので、
左のLoginの下の「postmaster@●●●.com」と 右にReset Passwordボタンがあるので、クリックして変更されたパスワードをコピーしておいてください。
次のDjangoの設定の際に使用します。

Djangoの設定

settings.pyのメール設定を以下のように変更または追記します。

EMAIL_HOST = 'smtp.mailgun.org'
EMAIL_PORT = 587
EMAIL_HOST_USER = '先ほどコピーしたログイン(例: postmaster@●●●.com)'
EMAIL_HOST_PASSWORD = '先ほどコピーしたパスワード'
EMAIL_USE_TLS = True

😊

ちなみにこのログインかパスワードを間違って設定すると「 Mailgun is not loving your login or password 」みたいなちょっとホッコリするエラーメッセージがくるよ

必須の設定はこれだけなので、メールがちゃんと送れるかどうかシェルから確認します。
ターミナルからDjangoのプロジェクトファイルまでいき、以下のコマンドで確認してください。

$ python manage.py shell
Python 3.7.2 (default, Oct 13 2019, 15:40:11) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.mail import send_mail
>>> send_mail("タイトル", "本文", "support@●●●.com", ["送りたいアドレス"])
1
>>>
送りたいアドレスにメールが受信されているか確認してください。

まとめ

Mailgunを使ってDjangoのアプリからメールを送信する方法を解説しました。
AWSのSESを使うことも考えましたが、送信先と送信元のどちらも認証されていないと送ることができず、この制限を解除するには申請が必要で数日かかりそうだったので今回はMailgunを使用しました。
またSendgridとDjangoの記事も書きたいと思います。

ここまで読んでくれてありがとうございました。 バイバイ👋