Django + إرسال بريد إلكتروني في HTML مع تسجيل Django
-
19-09-2019 - |
سؤال
أنا باستخدام تسجيل Django، كل شيء على ما يرام، وكان البريد الإلكتروني للتأكيد كان يرسل في نص عادي، ولكن يعرف IM ثابتة وهو يرسل في HTML، ولكن لدي مشكلة القمامة ... رمز HTML يظهر:
<a href="http://www.example.com/accounts/activate/46656b86eefc490baf4170134429d83068642139/">http://www. example.com/accounts/activate/46656b86eefc490baf4170134429d83068642139/</a>
وأنا لا أحتاج إلى إظهار كود HTML مثل ...
اي فكرة؟
شكرا
المحلول
أود أن أوصي بإرسال كل من إصدار نصي وإصدار HTML. ابحث في النماذج
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', '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()
نصائح أخرى
لتجنب الترقيع تسجيل Django، يجب عليك تمديد نموذج التسجيل وكيل = صحيح:
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. بدلا من تطبيق التسجيل.
أعلم أن هذا قديم وحزمة التسجيل لم تعد حافظا عليها. فقط في حالة ما زال شخص ما يريد هذا. الخطوات الإضافية WRT إلى إجابة BPPierre هي:
- Subclass The ResistanceView، أي وجهات نظر التطبيق الخاص بك
class MyRegistrationView(RegistrationView):
...
def register(self, request, **cleaned_data):
...
new_user = HtmlRegistrationProfile.objects.create_inactive_user(username, email, password, site)
- في Urls.py الخاص بك تغيير العرض إلى طريقة العرض الفرعية المستحقة، IE - قائمة القائمة
url(r'accounts/register/$', MyRegistrationView.as_view(form_class=RegistrationForm), name='registration_register'),'
هذا الرجل قد مدد defaultbackend تمكيننا من إضافة إصدار HTML من البريد الإلكتروني للتنشيط.
على وجه التحديد، تتم مهمة الإصدار البديل هنا
تمكنت من استخدام الجزء الخلفي بنجاح