85 lines
3.0 KiB
Python
85 lines
3.0 KiB
Python
from django.core.mail import send_mail, EmailMultiAlternatives
|
|
from django.template.loader import render_to_string
|
|
from django.utils.html import strip_tags
|
|
from django.conf import settings
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def send_html_email(subject, message, recipient_list, title=None, action_url=None, action_text=None, request=None):
|
|
"""
|
|
Sends a styled HTML email using the platform template.
|
|
"""
|
|
try:
|
|
from .models import PlatformProfile
|
|
platform = PlatformProfile.objects.first()
|
|
if not platform:
|
|
# Create a dummy platform object if none exists, to avoid errors
|
|
class DummyPlatform:
|
|
name = "Platform"
|
|
logo = None
|
|
address = ""
|
|
platform = DummyPlatform()
|
|
|
|
# Determine site URL
|
|
site_url = settings.SITE_URL if hasattr(settings, 'SITE_URL') else 'http://127.0.0.1:8000'
|
|
if request:
|
|
site_url = f"{request.scheme}://{request.get_host()}"
|
|
|
|
context = {
|
|
'platform': platform,
|
|
'title': title or subject,
|
|
'message': message,
|
|
'action_url': action_url,
|
|
'action_text': action_text,
|
|
'site_url': site_url,
|
|
}
|
|
|
|
html_content = render_to_string('emails/base_email.html', context)
|
|
text_content = strip_tags(html_content)
|
|
|
|
msg = EmailMultiAlternatives(subject, text_content, settings.DEFAULT_FROM_EMAIL, recipient_list)
|
|
msg.attach_alternative(html_content, "text/html")
|
|
msg.send()
|
|
return True
|
|
except Exception as e:
|
|
logger.error(f"Failed to send HTML email: {e}")
|
|
# Fallback to plain text
|
|
try:
|
|
send_mail(subject, message, settings.DEFAULT_FROM_EMAIL, recipient_list)
|
|
return True
|
|
except Exception as e2:
|
|
logger.error(f"Failed to send fallback email: {e2}")
|
|
return False
|
|
|
|
def send_contact_message(name, email, message):
|
|
"""
|
|
Sends a contact form message to the platform admins.
|
|
|
|
Args:
|
|
name (str): Sender's name
|
|
email (str): Sender's email
|
|
message (str): The message content
|
|
|
|
Returns:
|
|
bool: True if sent successfully, False otherwise
|
|
"""
|
|
try:
|
|
subject = f"New Contact Message from {name}"
|
|
full_message = f"You have received a new message from your website contact form.\n\n" \
|
|
f"Name: {name}\n" \
|
|
f"Email: {email}\n\n" \
|
|
f"Message:\n{message}"
|
|
|
|
recipient_list = settings.CONTACT_EMAIL_TO or [settings.DEFAULT_FROM_EMAIL]
|
|
|
|
# Use HTML email for contact form too, for consistency
|
|
return send_html_email(
|
|
subject=subject,
|
|
message=full_message,
|
|
recipient_list=recipient_list,
|
|
title="New Contact Message"
|
|
)
|
|
except Exception as e:
|
|
logger.error(f"Failed to send contact message: {e}")
|
|
return False |