2011-12-22 24 views
6

Tôi đang cố gắng đặt lại mật khẩu django nhưng email đặt lại không được gửi.Đặt lại mật khẩu Django. Không gửi thư

Tôi biết email của mình được định cấu hình đúng vì sau đây hoạt động cả trong trình bao và trong một chế độ xem của tôi (tôi đang sử dụng nó để nhận email hỗ trợ cho chính mình).

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

tôi có thể nhận được để xem mật khẩu reset của tôi (mật khẩu/reset/) và sau khi tôi cho nó email của tôi nó chuyển hướng một cách chính xác tôi để mật khẩu/reset/thực hiện/ nhưng nó không gửi e-mail.

Dưới đây là tôi 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'), 

Dưới đây là password_reset_form.html tôi:

<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> 

Bất kỳ ý tưởng? Cảm ơn

+0

Vui lòng chuyển nhận xét của bạn thành câu trả lời thực sự bên dưới. Bạn có thể đánh dấu nó là được chấp nhận sau hai ngày. Điều đó sẽ làm cho câu hỏi biến mất khỏi tab Câu hỏi chưa được trả lời. –

+0

Thật tuyệt, tôi là người mới đối với cộng đồng và loại mẹo đó thực sự hữu ích :) – Darkade

+0

Bạn được chào đón, cảm ơn rất nhiều vì đã quay trở lại và giúp chúng tôi dọn dẹp! –

Trả lời

7

Tôi nên đề cập đến tôi đang sử dụng hostgator làm nhà cung cấp của mình. Vì vậy, đây là settings.py của tôi

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]' 

Các cài đặt ở trên hoạt động!

+1

Tôi gặp vấn đề tương tự, giá trị còn thiếu là DEFAULT_FROM_EMAIL. Nếu không được đặt, email sẽ không gửi. – Max

3

Trong trường hợp của tôi, tôi đã tạo người dùng bằng cách sử dụng create_user(). Ý tưởng của tôi là tạo một loạt các tài khoản và sau đó nói với mọi người rằng họ có thể đi tới biểu mẫu đặt lại mật khẩu để đặt mật khẩu của họ. Tôi nghĩ rằng nó hút nếu bạn cần phải nói với họ 'Sử dụng mật khẩu' welcome123 "và sau đó đừng quên sửa đổi mật khẩu của bạn 'hoặc như vậy.

tôi phát hiện ra nếu tôi đã không vượt qua Password='foo' hay còn nếu tôi qua Password=None-create_user() reset mật khẩu được không được gửi. Điều này là bởi vì Django đôi khi sử dụng một mật khẩu trống để biết rằng nó không cần phải xác thực tại địa phương, mà là sử dụng LDAP hoặc như vậy.

Vì vậy, bây giờ tôi làm điều này:

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

Và tôi có thể hướng người dùng sử dụng chức năng khôi phục mật khẩu cho các tài khoản mới của họ. Tôi nghĩ rằng nó sẽ là tuyệt vời nếu tôi có một tùy chọn trong create_user để tự động gửi email kích hoạt tài khoản cho người dùng, mặc dù!

+0

Cảm ơn, tôi đã kéo tóc ra hàng giờ để tìm ra điều này. Btw, có 'mật khẩu = User.objects.make_random_password()' –

+0

Cảm ơn! FYI không os.urandom() hoặc make_random_password() làm việc cho tôi, tôi đã sử dụng: từ django.contrib.auth.hashers nhập make_password mật khẩu = make_password (User.objects.make_random_password()) – python1981

+0

Bất cứ ai suy nghĩ hoặc làm điều này nên dừng IMMEDIAGTELY và tạo biểu mẫu tùy chỉnh để cho phép người dùng đăng ký.nếu bạn muốn thực hiện các công cụ như phê duyệt quản trị, sửa đổi email hoặc tương tự ... hãy sử dụng http://django-registration.readthedocs.io/vi –

Các vấn đề liên quan