Django密码重置。不发送邮件

时间:2011-12-22 21:31:38

标签: django email 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)

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

这是我的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'),

这是我的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>

有什么想法吗?感谢

3 个答案:

答案 0 :(得分: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'

以上设置有效!

答案 1 :(得分:7)

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

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

现在我这样做:

User.objects.create_user(
  user_name,
  email=user_email,
  password=os.urandom(32),
)

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

答案 2 :(得分:0)

您需要从以下地址添加默认值:

DEFAULT_FROM_EMAIL ='info@mymail.com'

我现在看到它在注释中,但会在此处添加它,以防万一有人也错过它们。