100 lines
3.4 KiB
Python
100 lines
3.4 KiB
Python
from django.core.mail import send_mail
|
|
from django.template.loader import render_to_string
|
|
from django.conf import settings
|
|
from django.utils.html import strip_tags
|
|
|
|
from celery import shared_task
|
|
import logging
|
|
|
|
from apps.users.models import User
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
@shared_task(bind=True, max_retries=3)
|
|
def send_verification_email(self, user_id, verification_url):
|
|
try:
|
|
user = User.objects.get(id=user_id)
|
|
|
|
subject = 'تایید ایمیل | انجمن علمی مهندسی کامپیوتر'
|
|
html_message = render_to_string('emails/verification_email.html', {
|
|
'user': user,
|
|
'verification_url': verification_url,
|
|
})
|
|
plain_message = strip_tags(html_message)
|
|
|
|
send_mail(
|
|
subject=subject,
|
|
message=plain_message,
|
|
from_email=settings.DEFAULT_FROM_EMAIL,
|
|
recipient_list=[user.email],
|
|
html_message=html_message,
|
|
fail_silently=False,
|
|
)
|
|
|
|
logger.info(f"Verification email sent to {user.email}")
|
|
return f"Verification email sent to {user.email}"
|
|
|
|
except Exception as exc:
|
|
logger.error(f"Failed to send verification email: {exc}")
|
|
raise self.retry(exc=exc, countdown=60)
|
|
|
|
@shared_task(bind=True, max_retries=3)
|
|
def send_password_reset_email(self, user_id, reset_url):
|
|
try:
|
|
user = User.objects.get(id=user_id)
|
|
|
|
subject = 'بازیابی رمز عبور | انجمن علمی مهندسی کامپیوتر'
|
|
html_message = render_to_string('emails/password_reset_email.html', {
|
|
'user': user,
|
|
'reset_url': reset_url,
|
|
})
|
|
plain_message = strip_tags(html_message)
|
|
|
|
send_mail(
|
|
subject=subject,
|
|
message=plain_message,
|
|
from_email=settings.DEFAULT_FROM_EMAIL,
|
|
recipient_list=[user.email],
|
|
html_message=html_message,
|
|
fail_silently=False,
|
|
)
|
|
|
|
logger.info(f"Password reset email sent to {user.email}")
|
|
return f"Password reset email sent to {user.email}"
|
|
|
|
except Exception as exc:
|
|
logger.error(f"Failed to send password reset email: {exc}")
|
|
raise self.retry(exc=exc, countdown=60)
|
|
|
|
|
|
@shared_task(bind=True, max_retries=3)
|
|
def send_email_verified_success(self, user_id: int):
|
|
"""
|
|
ارسال ایمیل «ایمیل شما با موفقیت تأیید شد» پس از تغییر وضعیت تأیید.
|
|
"""
|
|
try:
|
|
user = User.objects.get(pk=user_id)
|
|
|
|
subject = "تأیید ایمیل شما با موفقیت انجام شد"
|
|
context = {
|
|
"user": user,
|
|
"home_url": getattr(settings, "FRONTEND_ROOT", "/"),
|
|
}
|
|
html_message = render_to_string("emails/verification_success.html", context)
|
|
plain_message = strip_tags(html_message)
|
|
|
|
send_mail(
|
|
subject=subject,
|
|
message=plain_message,
|
|
from_email=settings.DEFAULT_FROM_EMAIL,
|
|
recipient_list=[user.email],
|
|
html_message=html_message,
|
|
fail_silently=False,
|
|
)
|
|
logger.info(f"verified success email sent to {user.email}")
|
|
return f"verified success email sent to {user.email}"
|
|
|
|
except Exception as exc:
|
|
logger.error(f"Failed to send verified success email: {exc}")
|
|
raise self.retry(exc=exc, countdown=60)
|