2009-08-25 5 views
11

im, используя django-registration, все в порядке, письмо с подтверждением отправлялось в текстовом виде, но знаю im исправлено и отправляет в html, но у меня есть проблема с мусором ... HTML-код показывает:django + отправить электронное письмо в html с django-registration

<a href="http://www.example.com/accounts/activate/46656b86eefc490baf4170134429d83068642139/">http://www. example.com/accounts/activate/46656b86eefc490baf4170134429d83068642139/</a> 

и мне не нужно, чтобы показать HTML код вроде ...

Любая идея?

Благодаря

ответ

14

Я рекомендовал бы посылать как текстовую версию и HTML версию. Посмотрите в models.py в Джанго регистрации для:

send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, [self.user.email]) 

и вместо того, чтобы сделать что-то подобное из документации http://docs.djangoproject.com/en/dev/topics/email/#sending-alternative-content-types

from django.core.mail import EmailMultiAlternatives 

subject, from_email, to = 'hello', '[email protected]', '[email protected]' 
text_content = 'This is an important message.' 
html_content = '<p>This is an <strong>important</strong> message.</p>' 
msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) 
msg.attach_alternative(html_content, "text/html") 
msg.send() 
+0

Да Пол, thans для воспроизведения, но не работает я сделал таким образом и ничего ... но теперь это нормально :), теперь просто поставить ссылку без <а ... – Asinox

+0

Это отправит текстовое письмо, на которое некоторые клиенты будут создавать ссылки. Если вам когда-нибудь понадобится более интересный html, вам придется делать то, что я рекомендовал. –

+0

да, я пробовал, но не работает, но все в порядке :) плохо попробуйте мусор больше :) – Asinox

27

Чтобы избежать заплат Джанго регистрации, вы должны расширить модель RegistrationProfile с proxy=True:

models.py

class HtmlRegistrationProfile(RegistrationProfile): 
    class Meta: 
     proxy = True 
    def send_activation_email(self, site): 
     """Send the activation mail""" 
     from django.core.mail import EmailMultiAlternatives 
     from django.template.loader import render_to_string 

     ctx_dict = {'activation_key': self.activation_key, 
        'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, 
        'site': site} 
     subject = render_to_string('registration/activation_email_subject.txt', 
            ctx_dict) 
     # Email subject *must not* contain newlines 
     subject = ''.join(subject.splitlines()) 

     message_text = render_to_string('registration/activation_email.txt', ctx_dict) 
     message_html = render_to_string('registration/activation_email.html', ctx_dict) 

     msg = EmailMultiAlternatives(subject, message_text, settings.DEFAULT_FROM_EMAIL, [self.user.email]) 
     msg.attach_alternative(message_html, "text/html") 
     msg.send() 

И в вашей учетной записи просто используйте HtmlRegistrationProfile вместо RegistrationProfile.

+0

Это путь. Хорошая работа. – ajt

+0

Как зарегистрировать новый профиль с помощью бэкэнда регистрации? – Sam

+10

Как установить backend в профиль HtmlRegistration вместо RegistrationProfile? – AlexBrand

0

This guy have extended the defaultBackend, позволяющий нам добавить HTML-версию электронного письма активации.

В частности, альтернативный вариант работа выполняется here

мне удалось использовать серверную часть успешно

2

Я знаю, что это не старое и пакет регистрации больше не поддерживается. На всякий случай кто-то все еще хочет этого. Дополнительные шаги WRT к ответу @bpierre является:
- подкласс RegistrationView, т.е. views.py вашего приложения

class MyRegistrationView(RegistrationView): 
... 
def register(self, request, **cleaned_data): 
    ... 
    new_user = HtmlRegistrationProfile.objects.create_inactive_user(username, email, password, site) 

- в вашем urls.py изменить вид к виду юга классифицировано, т.е. - пункт Список

url(r'accounts/register/$', MyRegistrationView.as_view(form_class=RegistrationForm), name='registration_register'),'