2009-08-25 26 views
11

im usando django-registration, todo está bien, el correo electrónico de confirmación fue enviado en texto plano, pero sé que estoy arreglado y enviando en html, pero tengo un problema con la basura ... el código html está mostrando:django + enviar correo electrónico en html con django-registration

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

y no necesito para mostrar el código hTML como la ...

Alguna idea?

Gracias

Respuesta

14

me gustaría recomendar el envío de una versión de texto y una versión HTML. Mira en el models.py del django-registro para:

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

y en lugar de hacer algo como de los documentos 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

Sí Paul, thans para la reproducción, pero no está trabajando lo hice de esa manera y nada ... pero ahora está bien :), ahora sólo poner el enlace sin Asinox

+0

Eso enviará un correo electrónico de texto que algunos clientes crearán enlaces. Si alguna vez necesita html más interesante, tendrá que hacer lo que le recomendé. –

+0

sí, lo intenté pero no funcionó, pero está bien :) intentaré con una camada más :) – Asinox

27

Para evitar parches django-registro, se debe extender el modelo con 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() 

Y en su servidor de registro, simplemente use HtmlRegistrationProfile en lugar de RegistrationProfile.

+0

Este es el camino a seguir. Buen trabajo. – ajt

+0

¿Cómo registro el nuevo perfil con el backend de registro? – Sam

+10

¿Cómo configuro el backend para el perfil HtmlRegistration en lugar de RegistrationProfile? – AlexBrand

0

This guy have extended the defaultBackend permitiéndonos agregar una versión HTML del correo electrónico de activación.

En concreto, el trabajo se realiza versión alternativa here

logré usar la parte de back-end con éxito

2

Sé que esto es viejo y el paquete de registro ya no se mantiene. Por si acaso alguien todavía quiere esto. los pasos WRT adicional a la respuesta de @bpierre son:
- subclase el RegistrationView, es decir views.py de su aplicación

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

- en su urls.py cambiar la vista a la vista sub-clasificado, es decir, - elemento de lista

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