Сброс пароля Django. Не отправляю почту

Я пытаюсь сбросить пароль django, но письмо для сброса не отправляется.

Я знаю, что моя электронная почта настроена правильно, потому что следующее работает как в оболочке, так и в одном из моих представлений (я использую его для получения электронной почты поддержки себе).

from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.',
          '[email protected]',['[email protected]'], fail_silently=False)

Я могу перейти в режим сброса пароля (пароль / сброс /), и после того, как я дам ему свой адрес электронной почты, он правильно перенаправит меня на пароль / сброс / готово /, но это не так. t отправляет электронное письмо.

Вот мой 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>

Any ideas? Thanks


person Darkade    schedule 22.12.2011    source источник
comment
Пожалуйста, превратите ваш комментарий в настоящий ответ ниже. Вы можете отметить его как принятый через два дня. Это уберет вопрос с вкладки «Вопросы без ответа».   -  person Martin Geisler    schedule 12.01.2012
comment
Круто, я новичок в сообществе, и такие советы действительно полезны :)   -  person Darkade    schedule 13.01.2012
comment
Пожалуйста, большое спасибо за то, что вернулись и помогли нам навести порядок!   -  person Martin Geisler    schedule 13.01.2012


Ответы (3)


Я должен был упомянуть, что использую 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  = '[email protected]'
SERVER_EMAIL    = '[email protected]'

Вышеуказанные настройки работают!

person Darkade    schedule 13.01.2012
comment
У меня была такая же проблема, отсутствующее значение - DEFAULT_FROM_EMAIL. Если это не установлено, электронное письмо не будет отправлено. - person Max; 04.04.2013

В моем случае я создал пользователей с помощью 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 автоматически отправлять электронные письма для активации учетной записи пользователям!

person MichielB    schedule 24.08.2016
comment
Спасибо, я часами выдергивала волосы, пытаясь понять это. Кстати, есть password = User.objects.make_random_password() - person Apollo Data; 26.05.2017
comment
Спасибо! К вашему сведению, ни os.urandom (), ни make_random_password () у меня не работали, я использовал: from django.contrib.auth.hashers import make_password password = make_password (User.objects.make_random_password ()) - person python1981; 11.08.2017
comment
Любой, кто думает или делает это, должен НЕМЕДЛЕННО прекратить и создавать собственные формы, позволяющие пользователям регистрироваться. если вы хотите делать такие вещи, как одобрение администратора, изменение адреса электронной почты и т.п. ... используйте django-registration. readthedocs.io/en - person Derek Adair; 15.09.2017

Вам нужно добавить адрес по умолчанию, например:

DEFAULT_FROM_EMAIL = '[email protected]'

Теперь я вижу, что это есть в комментариях, но добавлю сюда, если кто-то их тоже пропустит.

person Josh    schedule 19.11.2020