from django.contrib.auth.models import User from django.core.mail import EmailMultiAlternatives from django.db import models from django.db.models.signals import post_save from django.dispatch import receiver from django.template.loader import render_to_string from django.utils.translation import gettext_lazy as _ from musicians.models import Musician class Message(models.Model): titel = models.CharField(max_length=100, verbose_name=_("titel")) text = models.TextField(blank=False, verbose_name=_("text")) creation_time = models.DateTimeField(verbose_name=_("creation_time")) author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("Author")) class Meta: ordering = ["-creation_time"] def __str__(self): return self.author.username + " : " + self.titel @receiver(post_save, sender=Message) def send_forum_notification(sender, instance, created, **kwargs): """Send email notification when a new message is created.""" if not created: return receivers = [m.user.email for m in Musician.objects.all() if m.user.email] if not receivers: return subject = "Blechreiz Forum: " + instance.titel from_email = "forum@blechreiz.com" context = {"messages": Message.objects.all().order_by("-creation_time")[:10]} text_content = render_to_string("simpleforum/mail.txt", context) msg = EmailMultiAlternatives(subject, text_content, from_email, receivers) # Uncomment to add HTML version: # html_content = render_to_string("simpleforum/mail.html", context) # msg.attach_alternative(html_content, "text/html") try: msg.send() except Exception: # Log the error but don't crash pass