diff --git a/CHANGELOG.md b/CHANGELOG.md index 4aa2c217ab..e3c5e26cec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,7 @@ and this project adheres to - 🔧(project) change env.d system by using local files #1200 - ⚡️(frontend) improve tree stability #1207 - ⚡️(frontend) improve accessibility #1232 +- ⚡(backend) move email sending to celery ### Fixed diff --git a/src/backend/core/api/viewsets.py b/src/backend/core/api/viewsets.py index ee0c594eb1..182ce87ad6 100644 --- a/src/backend/core/api/viewsets.py +++ b/src/backend/core/api/viewsets.py @@ -37,7 +37,7 @@ from core import authentication, choices, enums, models from core.services.ai_services import AIService from core.services.collaboration_services import CollaborationService -from core.tasks.mail import send_ask_for_access_mail +from core.tasks.mail import send_ask_for_access_mail, send_invitation_mail from core.utils import extract_attachments, filter_descendants from . import permissions, serializers, utils @@ -1640,10 +1640,11 @@ def perform_create(self, serializer): access = serializer.save(document_id=self.kwargs["resource_id"]) if access.user: - access.document.send_invitation_email( + send_invitation_mail.delay( + access.document.id, access.user.email, access.role, - self.request.user, + self.request.user.id, access.user.language or self.request.user.language or settings.LANGUAGE_CODE, @@ -1914,10 +1915,11 @@ def perform_create(self, serializer): """Save invitation to a document then send an email to the invited user.""" invitation = serializer.save() - invitation.document.send_invitation_email( + send_invitation_mail.delay( + invitation.document.id, invitation.email, invitation.role, - self.request.user, + self.request.user.id, self.request.user.language or settings.LANGUAGE_CODE, ) diff --git a/src/backend/core/tasks/mail.py b/src/backend/core/tasks/mail.py index 483c961486..299f1a6283 100644 --- a/src/backend/core/tasks/mail.py +++ b/src/backend/core/tasks/mail.py @@ -22,3 +22,24 @@ def send_ask_for_access_mail(ask_for_access_id): access.user.email, access.user.language or settings.LANGUAGE_CODE, ) + + +@app.task +def send_mail(document_id, subject, emails, context=None, language=None): + """Send email from a document template.""" + try: + document = models.Document.objects.get(id=document_id) + document.send_email(subject, emails, context, language) + except models.Document.DoesNotExist: + pass + + +@app.task +def send_invitation_mail(document_id, email, role, sender_id, language=None): + """Send invitation email for a document.""" + try: + document = models.Document.objects.get(id=document_id) + sender = models.User.objects.get(id=sender_id) + document.send_invitation_email(email, role, sender, language) + except (models.Document.DoesNotExist, models.User.DoesNotExist): + pass