概要
2024年からGoogleでは「安全性の低いアプリへのアクセス」を許可することが
できなるくなるみたいですので、
これまでとは若干異なる方法でGmailを送信する機能を作成する必要があります。
この記事ではローカル環境から自身で用意したGmailから任意のアドレスへメールを送信する機能を実装します。
バージョンなど
Django:3.2.6(4でも動作するかと)
OS:Mac OS
動作確認日:2024年1月2日
Googleアカウントの設定
Gmailを送信するためには、2段階認証をONにし、アプリパスワードを生成する必要があります。
アプリパスワードとは、Googleアカウントへログインする用のアカウントとは異なります。
https://myaccount.google.com/
上記のURLへ、メールを送信するアカウントでログインしてください。
ログイン後に、セキュリティタブから2段階認証を選択して、ONになっていない人は
Googleの指示に従い、ONにしてください。
ONにしたら、2段階認証プロセスをクリックして、下の方にスクロールすると
アプリパスワードという項目があります。
アプリパスワードをクリックして、適当なアプリ名を作成すると、
画面上に16桁のアプリパスワードが生成されます。
生成されたパスワードは保存しておいてください。
Djangoの設定ファイルを修正
以下をsettings.pyへ追記。
先ほどコピーしたパスワードとメアドを設定します。その他の項目はそのままでOKです。
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '送信用のメールアドレス'
EMAIL_HOST_PASSWORD = 'アプリパスワード'
Viewsの作成
send_mail()内は任意で変えてください。
from django.shortcuts import render
from django.core.mail import send_mail
def send_email(request):
send_mail(
'件名', # 件名
'メールの本文', # メッセージ
'mbiclife0@gmail.com', # 送信元のメールアドレス
['jjondayo@gmail.com'], # 送信先のメールアドレスのリスト
fail_silently=False,
)
return redirect('test') # メール送信後に遷移するページ
URLの設定
URLパターンに以下を追加します。
path('send_mail/', send_email, name='send_mail'),
テンプレート作成
任意のテンプレートに以下を追加。
<form action="{% url 'send_mail' %}" method="post">
{% csrf_token %}
<button type="submit">Mail</button>
</form>
これでメールを送ることができるはず、です。