37794-vm/core/mail.py
2026-01-28 02:13:53 +00:00

91 lines
3.3 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.
"""
try:
from .notifications import get_notification_content
context = {'name': name, 'email': email, 'message': message}
# Admin alerts default to EN
subj, email_msg, wa_msg = get_notification_content('contact_form_admin', context, language='en')
recipient_list = settings.CONTACT_EMAIL_TO or [settings.DEFAULT_FROM_EMAIL]
# Email
email_sent = send_html_email(
subject=subj,
message=email_msg,
recipient_list=recipient_list,
title="New Contact Message"
)
# WhatsApp (New feature: Notify admin on WhatsApp too)
try:
from .models import PlatformProfile
from .whatsapp_utils import send_whatsapp_message
profile = PlatformProfile.objects.first()
if profile and profile.phone_number:
send_whatsapp_message(profile.phone_number, wa_msg)
except Exception as e:
logger.warning(f"Failed to send admin WhatsApp for contact form: {e}")
return email_sent
except Exception as e:
logger.error(f"Failed to send contact message: {e}")
return False