from celery import shared_task from celery.utils.log import get_task_logger from django.core.mail import send_mail from django.conf import settings from django.utils.http import urlsafe_base64_encode from django.utils.encoding import force_bytes from django.template.loader import render_to_string from .tokens import * from .models import CustomUser logger = get_task_logger(__name__) @shared_task def send_password_reset_email_task(user_id): try: user = CustomUser.objects.get(pk=user_id) except CustomUser.DoesNotExist: error_msg = f"Task send_password_reset_email has failed. Invalid User ID was sent." logger.error(error_msg) raise Exception(error_msg) uid = urlsafe_base64_encode(force_bytes(user.pk)) token = password_reset_token.make_token(user) reset_url = f"{settings.FRONTEND_URL}/reset-password/{uid}/{token}" html_message = render_to_string( 'emails/password_reset.html', {'reset_url': reset_url} ) if settings.EMAIL_BACKEND == 'django.core.mail.backends.console.EmailBackend': logger.debug("\nEMAIL OBSAH:\n", html_message, "\nKONEC OBSAHU") send_email_with_context( recipients=user.email, subject="Obnova hesla", message=None, html_message=html_message ) # Only email verification for user registration @shared_task def send_email_verification_task(user_id): try: user = CustomUser.objects.get(pk=user_id) except CustomUser.DoesNotExist: error_msg = f"Task send_email_verification_task has failed. Invalid User ID was sent." logger.error(error_msg) raise Exception(error_msg) uid = urlsafe_base64_encode(force_bytes(user.pk)) token = account_activation_token.make_token(user) verification_url = f"{settings.FRONTEND_URL}/email-verification/?uidb64={uid}&token={token}" html_message = render_to_string( 'emails/email_verification.html', {'verification_url': verification_url} ) if settings.EMAIL_BACKEND == 'django.core.mail.backends.console.EmailBackend': logger.debug("\nEMAIL OBSAH:\n", html_message, "\nKONEC OBSAHU") send_email_with_context( recipients=user.email, subject="Ověření e-mailu", message=None, html_message=html_message ) def send_email_with_context(recipients, subject, message=None, html_message=None): """ General function to send emails with a specific context. """ if isinstance(recipients, str): recipients = [recipients] try: send_mail( subject=subject, message=message if message else '', from_email=None, recipient_list=recipients, fail_silently=False, html_message=html_message ) if settings.EMAIL_BACKEND == 'django.core.mail.backends.console.EmailBackend': logger.debug("\nEMAIL OBSAH:\n", html_message if html_message else message, "\nKONEC OBSAHU") return True except Exception as e: logger.error(f"E-mail se neodeslal: {e}") return False