djangoでメールを送信する

2022年5月3日

djangoでメールを送信する

今回はdjangoでgmailを送信したいと思います。
何かとメール送信はどんなアプリにも必要になってくるので押さえておきたいところです。

コーディングが必要なファイルは2つのみです。
1.settings.py
2.views.py

参考:
  メールを送る方法を解説【Gmailを使います】
  Djangoで、メールを送信
  Pythonでメール(gmail)を送信できない場合の解決法

settings.py

settings.pyに下記を追記いたします。


#--メール---------------------------------------------------
#コンソールに表示
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
# 実際にメールを送信
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
#メールサーバーへの接続設定
DEFAULT_FROM_EMAIL = 'your_mail_address@gmail.com' #送信元のアドレスを指定
EMAIL_HOST = 'smtp.gmail.com'                      #gmailの場合固定   
EMAIL_PORT = 587                                   #gmailの場合固定
EMAIL_HOST_USER = 'your_mail_address@gmail.com'    #あなたのgmailメールアドレス
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxxxxxx'           #あなたのgmailのパスワード又はアプリ用パスワード
EMAIL_USE_TLS = True                               #暗号化するのでTrueに

注意するところは「EMAIL_HOST_PASSWORD」の部分です。
googleのアカウントに二段階認証を設定している人には下のようなエラーが出ます。


smtplib.SMTPAuthenticationError: (535, ‘5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials

これを解決する為にはgoogleアカウント管理画面から「アプリ用パスワード」を発行してあげる必要があります。参考にさせて頂いたサイトはこちらになります。
小難しい設定はありません、アプリ名を入力してパスワード発行ボタンを押すとハッシュ値が表示されるのでその値を「EMAIL_HOST_PASSWORD」に設定してあげてください。

views.py

views.pyは下の通りになります。
「from_email」は送信元のアドレスを指定します。もし記載がない場合は上記で指定した「DEFAULT_FROM_EMAIL」のアドレスになります。
「recipient_list = []」の配列には宛先のアドレスを指定します。


#--メール----------------------------------------------
from django.core.mail import send_mail
def notify(request):
    subject = "題名"
    message = "本文"
    from_email = "your_mail_address@gmail.com"
    recipient_list = [
        "your_mail_address@gmail.com"
    ]
    send_mail(subject, message, from_email, recipient_list)
    return render(request, 'app/index.html')    

これでこの関数が呼び出された時、指定のアドレスにメールが送られます。

YouTube

2022年5月3日