2009-08-25 43 views
11

im sử dụng đăng ký django, tất cả đều ổn, email xác nhận đã được gửi bằng văn bản thuần túy, nhưng biết im đã được sửa và gửi bằng html, nhưng tôi có vấn đề về rác ... mã html đang hiển thị:django + gửi email bằng html với đăng ký django

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

và tôi không cần phải chứng minh mã html như ...

Bất kỳ ý tưởng?

Cảm ơn

Trả lời

14

Tôi muốn khuyên bạn nên gửi cả phiên bản văn bản và phiên bản html. Nhìn vào models.py của django-đăng ký:

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

và thay vào đó làm một cái gì đó như thế nào từ các tài liệu 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

có Paul, thans cho phát lại, nhưng không được làm việc tôi đã làm theo cách đó và không có gì ... nhưng bây giờ là ok :), bây giờ chỉ là một đưa vào liên kết mà không Asinox

+0

Điều đó sẽ gửi một email văn bản mà một số khách hàng sẽ tạo liên kết cho. Nếu bạn cần html thú vị hơn, bạn sẽ phải làm những gì tôi đề nghị. –

+0

có, tôi đã thử nhưng không làm việc, nhưng là ok :) bệnh thử một lứa nhiều hơn :) – Asinox

27

Để tránh vá django đăng ký lại, bạn nên mở rộng mô hình RegistrationProfile với 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() 

Và trong phần phụ trợ đăng ký của bạn, chỉ cần sử dụng HtmlRegistrationProfile thay vì RegistrationProfile.

+0

Đây là con đường để đi. Công việc tốt đẹp. – ajt

+0

Làm cách nào để đăng ký hồ sơ mới với phần phụ trợ đăng ký? – Sam

+10

Làm cách nào để đặt chương trình phụ trợ cho cấu hình HtmlRegistration thay vì RegistrationProfile? – AlexBrand

0

This guy have extended the defaultBackend cho phép chúng tôi thêm phiên bản HTML của email kích hoạt.

Cụ thể, phiên bản thay thế công việc được thực hiện here

tôi quản lý để sử dụng phần backend thành công

2

Tôi biết điều này là cũ và gói đăng ký không còn được duy trì. Chỉ trong trường hợp ai đó vẫn muốn điều này. Các bước bổ sung WRT để câu trả lời của @bpierre là:
- phân lớp các RegistrationView, tức là views.py của ứng dụng của bạn

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

- trong urls.py của bạn thay đổi quan điểm đến xem tiểu phân loại, tức là - List item

url(r'accounts/register/$', MyRegistrationView.as_view(form_class=RegistrationForm), name='registration_register'),' 
Các vấn đề liên quan