[Django3.0]send_mailでメール送信

ログイン時にユーザ名を忘れたユーザがいたら、メールフォームにemailアドレスを入力してもらって、auth_usersにメールアドレスがあれば、そのメールアドレスにユーザ名を送信したい。パスワードは送信しない。

ログイン画面

メール入力画面

公式ドキュメント: send email

SMTPは開発環境なので、mailtrapを使います。
EMAIL_BACKEND = ‘django.core.mail.backends.console.EmailBackend’とすれば、コマンドラインに表示されます。

settings.py

1
2
3
4
5
6
7
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
 
EMAIL_HOST = 'smtp.mailtrap.io'
EMAIL_PORT = 587
EMAIL_HOST_USER = '******'
EMAIL_HOST_PASSWORD = '******'
EMAIL_USE_TLS = True

### views.py
auth_userテーブルから、一致するemailがあるか確認し、あれば、そのメールアドレスにusernameを送信する。
送信はsend_mailを使用する。
本文の改行は”\n”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from django.core.mail import send_mail
 
def username_send(request):
    if(request.method == 'POST'):
        data = User.objects.filter(email=request.POST['email']).first()
        if data is not None:
            subject = "【Hanai】ユーザ名のお知らせ"
            message = 'お問い合わせありがとうございます。\nログインに必要なユーザ名をお知らせします。\n\nユーザ名:' + data.username + '\n\n\n※本メールは販売管理システムの\n送信専用のメールアドレスから自動送信されています。\nご返信いただいても返信できませんのでご了承ください。\n本サービスに心上がりがない場合など、お問い合わせください。\n\nHanbai'
            from_email = 'master@hanbai.com'
            recipient_list = [ data.email ]
            send_mail(subject, message, from_email, recipient_list)
        else:
            params = {
                'message': 'メールアドレスの登録がありません。'
            }
            return render(request, 'sales/username_forget.html', params)
    return render(request, 'sales/username_send.html')

メール受信

OK! 大分来た
さあ、この調子で続けてラズパイとopenCVやります。