"""Invitation Service.""" import smtplib from logging import getLogger from django.conf import settings from django.core.mail import send_mail from django.template.loader import render_to_string from django.utils.translation import get_language, override from django.utils.translation import gettext_lazy as _ logger = getLogger(__name__) class InvitationError(Exception): """Exception raised when invitation emails cannot be sent.""" status_code = 500 class InvitationService: """Service for invitations to users.""" @staticmethod def invite_to_room(room, sender, emails): """Send invitation emails to join a room.""" language = get_language() context = { "brandname": settings.EMAIL_BRAND_NAME, "logo_img": settings.EMAIL_LOGO_IMG, "domain": settings.EMAIL_DOMAIN, "room_url": f"{settings.EMAIL_APP_BASE_URL}/{room.slug}", "room_link": f"{settings.EMAIL_DOMAIN}/{room.slug}", "sender_email": sender.email, } with override(language): msg_html = render_to_string("mail/html/invitation.html", context) msg_plain = render_to_string("mail/text/invitation.txt", context) subject = str( _( f"Video call in progress: {sender.email} is waiting for you to connect" ) ) # Force translation try: send_mail( subject, msg_plain, settings.EMAIL_FROM, emails, html_message=msg_html, fail_silently=False, ) except smtplib.SMTPException as e: logger.error("invitation to %s was not sent: %s", emails, e) raise InvitationError("Could not send invitation") from e