django+ enviar correo electrónico en html con django-registration
-
19-09-2019 - |
Pregunta
Estoy usando django-registration, todo está bien, el correo electrónico de confirmación se envió en texto plano, pero sé que estoy arreglado y se envía en html, pero tengo un problema de basura...el código html muestra:
<a href="http://www.example.com/accounts/activate/46656b86eefc490baf4170134429d83068642139/">http://www. example.com/accounts/activate/46656b86eefc490baf4170134429d83068642139/</a>
y no necesito mostrar el código html como...
¿Alguna idea?
Gracias
Solución
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', 'from@example.com', 'to@example.com'
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()
Otros consejos
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 base de registro, sólo tiene que utilizar HtmlRegistrationProfile en lugar de RegistrationProfile .
Sé que esto es antiguo y el paquete de registro ya no se mantiene.Por si acaso alguien todavía quiere esto.Los pasos adicionales relacionados con la respuesta de @bpierre son:
- subclasificar el RegistrationView, es decirvistas.py de tu 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 cambie la vista a la vista subclasificada, es decir- Elemento de lista
url(r'accounts/register/$', MyRegistrationView.as_view(form_class=RegistrationForm), name='registration_register'),'
Este tipo han extendido el defaultBackend que nos permite añadir una versión HTML el correo electrónico de activación.
Específicamente, el trabajo versión alternativa se realiza aquí
Me las arreglé para usar la parte de back-end éxito