Search code examples
djangosatchmo

satchmo password_reset html format mail


Ive been requested by a client that his satchmo store should send an html formatted mail when resetting his password.

Aparently satchmo or django's contrib.auth.views.password_reset sends only raw email.

How do I modify this in order to be able to send html formatted mails?

Thank you!


Solution

  • I haven't used Satchmo, but this should get you started.

    First of all, subclass the PasswordResetForm, and override the save method to send an html email instead of a plain text email.

    from django.contrib.auth.forms import PasswordResetForm
    
    class HTMLPasswordResetForm(PasswordResetForm):
        def save(self, domain_override=None, email_template_name='registration/password_reset_email.html',
                 use_https=False, token_generator=default_token_generator, from_email=None, request=None):
            """
            Generates a one-use only link for resetting password and sends to the user
            """
            # Left as an exercise to the reader
    

    You can use the existing PasswordResetForm as a guide. You need replace the send_mail call at the end with code to send html emails. The docs about sending html emails should help.

    Once you've written your form, you need to include the form in the url pattern for password_reset. As I said, I don't have any experience of Satchmo, but looking at the source code, I think you want to update satchmo_store.accounts.urls, by changing the password_reset_dict.

    # You need to import your form, or define it in this module
    from myapp.forms import HTMLPasswordResetForm
    
    #Dictionary for authentication views
    password_reset_dict = {
        'template_name': 'registration/password_reset_form.html',
        # You might want the change the email template to .html
        'email_template_name': 'registration/password_reset.txt',
        'password_reset_form': HTMLPasswordResetForm,
    }
    
    # the "from email" in password reset is problematic... it is hard coded as None
    urlpatterns += patterns('django.contrib.auth.views',
        (r'^password_reset/$', 'password_reset', password_reset_dict, 'auth_password_reset'),
        ...