Skip to content

Commit

Permalink
Merge pull request #241 from salty-ivy/fix-230-mass-email-background-…
Browse files Browse the repository at this point in the history
…task

Fixes #230: Server crash due to lack of background task for send_mass_email at event registration
  • Loading branch information
DevilsAutumn authored Dec 8, 2024
2 parents acecc53 + 54ff8d4 commit a41c6a2
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
31 changes: 30 additions & 1 deletion backend/djangoindia/bg_tasks/event_registration.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
import logging

from celery import shared_task

from django.conf import settings
from django.core.mail import EmailMultiAlternatives
from django.core.mail import EmailMultiAlternatives, send_mass_mail
from django.template.loader import render_to_string
from django.utils import timezone
from django.utils.html import strip_tags

from djangoindia.db.models import EventRegistration


logger = logging.getLogger(__name__)


def format_text(text: str) -> str:
words = text.split("_")
formatted_words = [word.capitalize() for word in words]
Expand Down Expand Up @@ -48,3 +53,27 @@ def registration_confirmation_email_task(email, event_id):
except Exception as e:
# Handle exceptions (e.g., logging, re-raising, etc.)
print(f"Error sending email: {e}")


@shared_task(bind=True, max_retries=3)
def send_mass_mail_task(self, emails, **kwargs):
"""
Converts django.core.mail.send_mass_email into a background task.
- Args:
emails (list): List of email data tuples (subject, message, from_email, recipient_list).
kwargs: Additional arguments passed to `send_mass_mail`.
Returns:
same as `send_mass_mail`
"""
if not isinstance(emails, (list, tuple)):
logger.exception(
"Invalid input: Emails must be a list or tuple of email data tuples."
)

try:
return send_mass_mail(emails, **kwargs)
except Exception:
logger.exception("Failed to send mass emails.")
logger.debug("Detailed exception information:", exc_info=True)
4 changes: 2 additions & 2 deletions backend/djangoindia/db/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@

from django.conf import settings
from django.contrib import admin, messages
from django.core.mail import send_mass_mail
from django.db import transaction
from django.db.models import Count, F
from django.shortcuts import redirect
from django.template.response import TemplateResponse
from django.urls import path

from djangoindia.bg_tasks.event_registration import send_mass_mail_task
from djangoindia.db.models.communication import ContactUs, Subscriber
from djangoindia.db.models.event import Event, EventRegistration
from djangoindia.db.models.partner_and_sponsor import (
Expand Down Expand Up @@ -124,7 +124,7 @@ def send_email_view(self, request):
recipient_email = registration.email
emails.append((subject, message, from_email, [recipient_email]))

send_mass_mail(emails, fail_silently=False)
send_mass_mail_task(emails, fail_silently=False)
messages.success(
request, f"{len(emails)} emails sent successfully."
)
Expand Down

0 comments on commit a41c6a2

Please sign in to comment.