Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: Password reset email subject line contains 'example.com

Tags:

email

django

I'm using the generic view django.contrib.auth.views.password_reset for the password reset form. In principle, it all works, except that the subject line of the email that's sent out contains 'example.com', as in: "Password reset on example.com".

So I have looked around, but for the life of me I cannot find out how I can change this to contain my actual domain name.

Any ideas?

like image 746
jbrendel Avatar asked Apr 28 '11 02:04

jbrendel


2 Answers

The PasswordResetForm sends the email based on your contrib.sites. It gets the domain name to use and passes it to the html template at registration/password_reset_email.html

django/trunk/django/contrib/auth/forms.py:

...
4     from django.contrib.sites.models import get_current_site
...

123     def save(self, domain_override=None, email_template_name='registration/password_reset_email.html',
124              use_https=False, token_generator=default_token_generator, from_email=None, request=None):
125         """
126         Generates a one-use only link for resetting password and sends to the user
127         """
128         from django.core.mail import send_mail
129         for user in self.users_cache:
130             if not domain_override:
131                 current_site = get_current_site(request)
132                 site_name = current_site.name
133                 domain = current_site.domain
134             else:
135                 site_name = domain = domain_override
136             t = loader.get_template(email_template_name)
137             c = {
138                 'email': user.email,
139                 'domain': domain,
140                 'site_name': site_name,
141                 'uid': int_to_base36(user.id),
142                 'user': user,
143                 'token': token_generator.make_token(user),
144                 'protocol': use_https and 'https' or 'http',
145             }
146             send_mail(_("Password reset on %s") % site_name,
147                 t.render(Context(c)), from_email, [user.email])

use admin or django shell to change the site

read more about the sites framework here.

How Django uses the sites framework

Although it's not required that you use the sites framework, it's strongly encouraged, because Django takes advantage of it in a few places. Even if your Django installation is powering only a single site, you should take the two seconds to create the site object with your domain and name, and point to its ID in your SITE_ID setting.

in shell you can do this by doing:

>>> from django.contrib.sites.models import Site
>>> my_site = Site(domain='some_domain.com', name='Some Domain')
>>> my_site.save()
>>> print my_site.id
2
>>>

in your settings.py:

SITE_ID = 2

or

>>> my_site = Site.objects.get(pk=1)
>>> my_site.domain = 'somedomain.com'
>>> my_site.name = 'Some Domain'
>>> my_site.save()

in your settings.py:

SITE_ID = 1
like image 126
dting Avatar answered Nov 08 '22 03:11

dting


Assuming you have the admin site up go to the "sites" group and change the first one there to your domain?

Either that or there is something in settings.py. http://docs.djangoproject.com/en/dev/topics/settings/#the-basics

I'll just check and find out for you

EDIT:

I am fairly certain thats what I did to make it work for me.

like image 1
James Khoury Avatar answered Nov 08 '22 01:11

James Khoury