在 Django 中发送密码重置电子邮件时遇到困难

Getting stuck with sending password reset email in django

我正在尝试在 Corey MS 的 youtube 频道的教程的帮助下,使用其核心密码重置功能在我的 Django 应用程序中添加用户密码重置功能。我做了他所做的。我没有收到任何错误,但没有发送任何电子邮件。

我已经尝试使用我的个人电子邮件服务器。我使用另一个 python 脚本使用 python smtplib 和 MIME 检查了它,完美地为我发送了电子邮件。但是在 Django 中,什么也没有发生。

然后,我浏览了几篇文章和问答。最后,我使用命令行设置了一个本地电子邮件服务器 python -m smtpd -n -c DebuggingServer localhost:1025 命令。但结果是一样的。命令行显示已发送电子邮件。但实际上并非如此。

这是我的截图和相关代码。

我的应用程序显示,电子邮件已发送。

成功消息和项目结构:

settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025

urls.py

from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from users import views as user_views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', user_views.register, name='register'),
    path('profile/', user_views.profile, name='profile'),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name='login'),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name='logout'),
    path('password-reset/',
         auth_views.PasswordResetView.as_view(
             template_name='users/password_reset.html'
         ),
         name='password_reset'),
    path('password-reset/done/',
         auth_views.PasswordResetDoneView.as_view(
             template_name='users/password_reset_done.html'
         ),
         name='password_reset_done'),
    path('password-reset-confirm/<uidb64>/<token>/',
         auth_views.PasswordResetConfirmView.as_view(
             template_name='users/password_reset_confirm.html'
         ),
         name='password_reset_confirm'),
    path('password-reset-complete/',
         auth_views.PasswordResetCompleteView.as_view(
             template_name='users/password_reset_complete.html'
         ),
         name='password_reset_complete'),
    path('', include('blog.urls')),
]

password_reset.html

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Reset Password</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Request Password Reset</button>
            </div>
        </form>
    </div>
{% endblock content %}

password_reset_done.html

{% extends "blog/base.html" %}
{% block content %}
    <div class="alert alert-info">
        An email has been sent with instructions to reset your password
    </div>
{% endblock content %}

password_reset_confirm.html

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                <legend class="border-bottom mb-4">Reset Password</legend>
                {{ form|crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Reset Password</button>
            </div>
        </form>
    </div>
{% endblock content %}

password_reset_complete.html

{% extends "blog/base.html" %}
{% block content %}
    <div class="alert alert-info">
        Your password has been set.
    </div>
    <a href="{% url 'login' %}">Sign In Here</a>
{% endblock content %}

如果我需要添加更多详细信息,请发表评论。 请让我知道,为什么我的代码不起作用?我还需要做什么?

首先,我会用一个简单的测试邮件 doku 来测试您的电子邮件设置。 在我的服务器上,我在 settings.py 文件中设置了以下变量:

  • EMAIL_HOST,
  • EMAIL_PORT、
  • EMAIL_HOST_USER
  • EMAIL_HOST_密码
  • EMAIL_USE_TLS

由于我们使用的是 Django 的 auth 用户,那么我们所知道的是 User 模型带有内置的 Django 视图,那么如果我们使用的是用于接收 Django 重置密码的电子邮件地址 link , 我们应该写我们创建帐户时注册的相同电子邮件。

EMAIL_HOST_USER : 'youremail@gmail.com'  

这个邮箱应该和你注册的邮箱是一样的,我是说你注册的时候用的,数据库里有特定用户使用的邮箱。 因此,当您从 Django 向 Gmail 服务器发送密码重置时,也请使用此电子邮件。