Django密码重置.不发送邮件

Dar*_*ade 9 email django django-forms django-authentication

我正在尝试让django密码重置工作,但重置电子邮件不会被发送.

我知道我的电子邮件配置正确,因为以下内容适用于shell和我的一个视图(我用它来获取支持电子邮件给自己).

from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.',
          'admin@mydomain.com',['me@gmail.com'], fail_silently=False)
Run Code Online (Sandbox Code Playgroud)

我可以进入我的重置密码视图(密码/重置/),在我给它我的电子邮件后,它正确地重定向到密码/重置/完成/但它不发送电子邮件.

这是我的urls.py:

(r'^password/reset/$','django.contrib.auth.views.password_reset'),
(r'^password/reset/done/$','django.contrib.auth.views.password_reset_done'),
(r'^password/reset/confirm/$','django.contrib.auth.views.password_reset_confirm'),
(r'^password/reset/complete/$','django.contrib.auth.views.password_reset_confirm'),
(r'^password/change/$','django.contrib.auth.views.password_change'),
(r'^password/change/done/$','django.contrib.auth.views.password_change_done'),
Run Code Online (Sandbox Code Playgroud)

这是我的password_reset_form.html:

<html>
<head>
    <link rel="stylesheet" type="text/css" href="/media/css/style_login.css" />
    <title>Información de acceso requerida</title>
</head>
<body>
    <div id="wrapper">
        <h1>Recuperar password</h1>
        <p>Utilice este formulario cuando desee recuperar el password para su usuario.</p>
        {% if form.errors %}
        <p>No hay un usuario registrado con ese correo electronico.</p>
        {% endif %}
        <form method="post" action="{% url django.contrib.auth.views.password_reset_done %}">
            {% csrf_token %}
            {{ form }}
            <input class="login" type="submit" value="Recuperar" />
        </form>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢

Dar*_*ade 9

我应该提到我使用hostgator作为我的提供者.所以这是我的settings.py

EMAIL_HOST      = 'my-domain.com'
EMAIL_HOST_PASSWORD = 'my cpanel password'
EMAIL_HOST_USER = 'my cpanel user'
EMAIL_PORT      = 25
EMAIL_USE_TLS   = False
DEFAULT_FROM_EMAIL  = 'webmaster@my-host.com'
SERVER_EMAIL    = 'root@my-domain.com'
Run Code Online (Sandbox Code Playgroud)

以上设置有效!

  • 我遇到了同样的问题,缺少的值是DEFAULT_FROM_EMAIL.如果未设置,则不会发送电子邮件. (2认同)

Mic*_*elB 8

就我而言,我使用了创建用户create_user().我的想法是创建一堆帐户然后告诉人们他们可以转到密码重置表单来设置他们的密码.如果您需要告诉他们"使用密码"welcome123"然后别忘了修改您的密码",我认为这很糟糕.

我发现,如果我没有通过Password='foo'或另外,如果我传递Password=Nonecreate_user()密码重置是不发送.这是因为Django有时使用空密码来知道它不需要在本地进行身份验证,而是使用LDAP等.

所以现在我这样做:

User.objects.create_user(
  user_name,
  email=user_email,
  password=os.urandom(32),
)
Run Code Online (Sandbox Code Playgroud)

我可以指示人们为他们的新帐户使用密码重置功能.我认为如果我在create_user中有一个选项可以自动发送电子邮件以激活用户帐户,那将是非常棒的!