diff --git a/CHANGELOG.md b/CHANGELOG.md index 6badccff55..32b68c28a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -119,6 +119,7 @@ and this project adheres to - ⚡️(frontend) improve tree stability #1207 - ⚡️(frontend) improve accessibility #1232 - 🛂(frontend) block drag n drop when not desktop #1239 +- ⚡(backend) move email sending to celery ### Fixed diff --git a/src/backend/core/api/viewsets.py b/src/backend/core/api/viewsets.py index 1fb95c4eb6..043c59b66d 100644 --- a/src/backend/core/api/viewsets.py +++ b/src/backend/core/api/viewsets.py @@ -47,7 +47,7 @@ from core.services.converter_services import ( YdocConverter, ) -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 @@ -1764,10 +1764,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, @@ -2041,10 +2042,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..dfc7f4be2c 100644 --- a/src/backend/core/tasks/mail.py +++ b/src/backend/core/tasks/mail.py @@ -22,3 +22,16 @@ 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.""" + document = models.Document.objects.get(id=document_id) + document.send_email(subject, emails, context, language) + +@app.task +def send_invitation_mail(document_id, email, role, sender_id, language=None): + """Send invitation email for a document.""" + document = models.Document.objects.get(id=document_id) + sender = models.User.objects.get(id=sender_id) + document.send_invitation_email(email, role, sender, language)