【Django】メール送信をgmailで行うときの認証設定

djangoでは、便利なメール送信機能が用意されています。

メール送信機能が使いこなせれば、例えば問い合わせフォームも簡単に作成することができます。

本日はそんなメール送信機能の使い方を紹介していきます。

ちなみに今回は、バックエンドのsettings.pyとviews.pyの設定方法になりますので、フロント箇所は次の機会に紹介します。

また基本的なお問い合わせフォームの作成は以下の過去記事で紹介しています。

設定手順

基本的にバックエンドでコードを書くのは、settings.pyとviews.pyの2つのみになります。

(今回はフロントは割愛しています。)

settings.py

djangoの設定ファイルであるsettings.pyに、メールサーバーを使用するための変数を編集する必要があります。

EMAIL_HOSTは、今回gmailを使用するためにsmtp.gmail.comを記述します。

settings.py

EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = <送信先gmail>
EMAIL_HOST_PASSWORD = <送信したいgmailのAPI key>
EMAIL_PORT = 587
EMAIL_USE_TLS = True

views.py

問い合わせフォームにpostされた内容を適切に処理して、メッセージを送信する必要があります。

今回は、お問い合わせ(inquiry)機能を想定し、また入力欄には以下のような感じでメール(email)、件名(subject)、お問い合わせ内容(message)が入力欄として設置されていることを想定とします。

views.py

from django.core.mail import send_mail
from .forms import InquiryForm
from django.conf import settings
from django.core.mail import BadHeaderError, send_mail
-
-
-
-
def inquiry_form(request):
    if request.method != 'POST':
        form = InquiryForm()
        if form.is_valid():
            email = form.cleaned_data['email']
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['message']
            try:
                send_mail(
                    subjcect=subject,
                    message=message,
                    from_email=email,
                    recipient_list=[settings.EMAIL_HOST_USER])
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
-
-
-
  • send_mailは最低4つの引数(subject, message, from_email, recipient_list)が必要です
  • except BadHeaderError: ではへッダインジェクション攻撃時の処理を書いています

また実際にこちらのコードを参考にして、GmailのAPIを使用したときに陥りやすいエラーをこちらの記事で紹介しています。

以上。

参考

https://docs.djangoproject.com/ja/3.0/topics/email/

最後に

いかがでしたでしょうか。

以上が、「【Django】メール送信をgmailで行うときの認証設定」の紹介記事になります。

プログラミング学習を効率良く進めるには…

私ヒロヤンがプログラミングを始めた頃は以下のような感じでした。

何から手をつけていいのか、わからない。

プログラミングを始めてみたけど、エラーが解決できない。

そしてネットで調べていくうちに膨大な時間が過ぎていきました。

私ヒロヤンの実体験より、プログラミングを効率的に学ぶために大切なことは以下のことだと考えています。

1. いつまでもダラダラとやらないで、目標を決定して短期集中する

2. マンツーマンで、わからない箇所は直ぐに質問をして即レスをもらう

.proでは私ヒロヤンが学習してきたプログラミング経験0からのpython/django、その他webサイト・サービス開発のコースが用意されています。

カウンセリング自体は無料なので話を聞いてみるだけでもいかがでしょうか?

また以下のリンク先ではdjangoを教えてくれるスクールをまとめ紹介しています。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です