ここでは電子メールを送信するための設定を行い,実際に送信する実験を行います.
メールアカウントの情報は settings.py
に記述してもよいのですが,アカウント名(メールアドレス)やアプリパスワード(Gmail 以外の場合は平文パスワード)を記述して Git で管理することは決しておすすめできません.ここでは,Git の管理下に置かない settings_secret.py
に記述して,これを settings.py
からインポートするようにします.
まず,.gitignore
を編集して,settings_secret.py
を Git 管理下に置かないようにします.
.gitignore
db.sqlite3
*/__pycache__/
*/*/__pycache__/
.coverage
htmlcov
.DS_Store
settings_secret.py
ファイルを作成して Gmail の設定情報を入力します.EMAIL_HOST_PASSWORD
には前のページで取得した16文字のアプリパスワードを指定します.また,EMAIL_FROM
にメールアドレスだけを指定すると,受信者には送信者のメールアドレスがそのまま表示されます.9行目のような書き方にすると受信者には送信者名が表示されるようになります.
custom_auth_project/settings_secret.py
# Gmail ---------------------------
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'xxxxxx@gmail.com'
EMAIL_HOST_PASSWORD = 'yyyyyyyyyyyyyyyy' # application password
EMAIL_PORT = 587
EMAIL_USE_TLS = True
## FROM は次のどちらかの書き方でOK
# EMAIL_FROM = 'xxxxxx@gmail.com'
EMAIL_FROM = 'UserName<xxxxxx@gmail.com>'
いま作成した settings_secret.py
を settings.py
でインポートします.
custom_auth_project/settings.py
from pathlib import Path
from .settings_secret import *
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
メールの設定ができたので実際に送信するコードを入力して,簡単なメールを送信してみよう.
まず,http://127.0.0.1:8000/mail_test/ にアクセスすると決まったメールアドレスに決まった内容のメールが送信されるような機能を実装します.このために URL を定義します.
custom_auth_project/urls.py
from django.contrib import admin
from django.urls import path
from django.urls import include
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('admin/', admin.site.urls),
path('comments/', include('comments.urls')),
path('users/', include('users.urls')),
path('mail_test/', views.users_mail_test, name='mail_test'),
]
次にビューを定義します.
custom_auth_project/views.py
from django.shortcuts import render
from django.conf import settings
from django.core.mail import send_mail
from django.shortcuts import redirect
from django.urls import reverse
from django.contrib import messages
# Create your views here.
def index(request):
context = {}
return render(request, 'index.html', context)
def users_mail_test(request):
send_mail(
'メールのタイトル',
'ジャンゴからのテストメッセージの本文です.',
settings.EMAIL_FROM, # FROM
['xxxxxxxxx@aa.bbbbbbbbbb.ac.jp'], # TO
fail_silently=False
)
messages.success(request, 'メールを送信しました')
return redirect(reverse('index'))
トップページにメール送信のためのリンクを作成します.
comments/templates/index.html
{% extends "base.html" %}
{% block title %}
コメント投稿アプリケーション
{% endblock %}
{% block content %}
<h1 class="my-5">コメント投稿アプリケーション</h1>
<p>
<a href="{% url 'comments:index' %}">
コメント一覧ページに移動します.
</a>
</p>
<p>
<a href="{% url 'users:index' %}">
ユーザ一覧ページに移動します.
</a>
</p>
<p>
<a href="{% url 'mail_test' %}">
テストメールを送信します
</a>
</p>
{% endblock content %}
トップページに接続して,「テストメールを送信します」のリンクをクリックします.
メールの送信が完了すればトップページに戻ります.
メールを受信すると送信されたメールの中身を確認できます.
なお,メールの送信がうまくできれば,urls.py, views.py, index.html にここで追加したコードを削除するようにしてください.