from django.core.mail.backends.smtp import EmailBackend as BaseEmailBackend
from django.core.mail import EmailMultiAlternatives
from django.template.loader import render_to_string
from django.utils.html import strip_tags

class HTMLEmailBackend(BaseEmailBackend):
    """Custom email backend that ensures HTML emails are sent properly."""
    
    def _send_html_email(self, subject, html_content, from_email, recipient_list,
                      fail_silently=False, auth_user=None, auth_password=None,
                      connection=None):
        """Send an HTML email with a plain text fallback."""
        if not connection:
            connection = self.open()
        
        # Create plain text version from HTML
        text_content = strip_tags(html_content)
        
        # Create the email message
        msg = EmailMultiAlternatives(
            subject, text_content, from_email, recipient_list,
            connection=connection
        )
        
        # Attach HTML version
        msg.attach_alternative(html_content, "text/html")
        
        try:
            return msg.send()
        except Exception as e:
            if not fail_silently:
                raise
            return False
