アカウント未検証のユーザがパスワードリセットを実行したときには,未検証であることを理由にメールの送信は行われません.しかしながら,ユーザには「メールを送信しました」という表示が出てしまうバグがあるので,このバグを修正しよう.
users/views.py
class PasswordResetView(PasswordContextMixin, FormView):
    email_template_name = "users/password_reset_email.html"
    extra_email_context = None
    form_class = PasswordResetForm
    from_email = settings.EMAIL_FROM
    html_email_template_name = None
    subject_template_name = "users/password_reset_subject.txt"
    success_url = reverse_lazy("users:password_reset_done")
    template_name = "users/password_reset_form.html"
    title = _("Password reset")
    token_generator = default_token_generator
    @method_decorator(csrf_protect)
    def dispatch(self, *args, **kwargs):
        return super().dispatch(*args, **kwargs)
    def form_valid(self, form):
        # メールアドレスのチェック:登録されていないアドレスには送信しない
        users = UserModel.objects.filter(email=form.cleaned_data['email'])
        if len(users) == 0:
            messages.success(self.request, '登録されていないメールアドレスです')
            return redirect(reverse('index'))
        if not users[0].is_active:
            messages.success(self.request, 'メールアドレスの検証が終わっていません')
            messages.success(self.request, '受け取ったメールを確認してください')
            messages.success(self.request, 'あるいはこのページからメールを再送信してください')
            return redirect(reverse('users:create_resend'))
        messages.success(self.request, 'メールを送信しました')
        opts = {
            "use_https": self.request.is_secure(),
            "token_generator": self.token_generator,
            "from_email": self.from_email,
            "email_template_name": self.email_template_name,
            "subject_template_name": self.subject_template_name,
            "request": self.request,
            "html_email_template_name": self.html_email_template_name,
            "extra_email_context": self.extra_email_context,
        }
        form.save(**opts)
        return super().form_valid(form)
未検証ユーザがパスワードリセットを行おうとするとエラーが表示され,メール再送信のページにリダイレクトされることが確認できました.