@@ -11,6 +11,10 @@ from authentication.services.email_token_service import EmailTokenService from ml_model.services.minio_service import MinIOService from reports.models.error_report import ErrorReport +from django.core.mail import send_mail +from django.utils.html import strip_tags + + logger = logging.getLogger(__name__) @@ -6,6 +6,7 @@ from django.db.models import Q, QuerySet from django.db.transaction import atomic from django.utils.translation import gettext_lazy as _ from rest_framework.request import Request +from django.conf import settings from authentication.exceptions.business_host_exceptions.not_allowed_ip import NotAllowedIP from authentication.models import ( @@ -33,6 +34,7 @@ from authentication.serializers import ( from authentication.services.email_service import EmailService from authentication.services.utm_service import UTMService from authentication.utils import get_client_ip +from authentication.tasks import send_corporate_offer_task from ml_model.services.minio_service import MinIOService from payments.services.referral_account import ReferralAccountService @@ -65,7 +67,6 @@ class UserService: ) user.save() - EmailService(user).send_reg_conf_email() if referer_username := user_data.get('referer'): try: @@ -79,6 +80,10 @@ class UserService: ) except CustomUserModel.DoesNotExist: ... + + email_domain = user.email.split('@')[-1] + if email_domain not in settings.VALID_EMAIL_DOMAINS: + send_corporate_offer_task.apply_async(args=[user.email], countdown=5) return user def create_user_telegram(self, request: Request) -> TelegramUser: @@ -0,0 +1,21 @@ + + +
+ + +Здравствуйте!
+В AIR можно оформить корпоративный аккаунт прямо на платформе, чтобы упростить работу для ваших коллег:
+Оформить корпоративный аккаунт можно в настройках профиля. Если возникнут вопросы — мы всегда на связи!
+Нужна помощь с оформлением доступа к платформе по ЭДО? Обращайтесь на info@air.fail
+Всегда с вами,
+Команда AIR
+ + @@ -0,0 +1,22 @@ +from celery import shared_task + +from django.template.loader import get_template + +from authentication.services.email_service import EmailService + +import logging + + +logger = logging.getLogger(__name__) + +@shared_task +def send_corporate_offer_task(email: str): + try: + template = get_template('corporate_offer_letter.html') + except Exception as exc: + logger.warning(f"Template error: {exc}, email: {email}") + return + html_message = template.render() + EmailService(None).send_email("Корпоративный аккаунт AIR", html_message, email) + + @@ -165,6 +165,7 @@ TEMPLATES = [ 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [ BASE_DIR / 'core' / 'templates', + BASE_DIR / 'authentication' / 'templates', ], 'APP_DIRS': True, 'OPTIONS': { @@ -347,6 +348,7 @@ EMAIL_PORT = env.int('EMAIL_PORT', default=143) EMAIL_HOST_USER = env.str('EMAIL_HOST_USER', default='defaultuser') EMAIL_HOST_PASSWORD = env.str('EMAIL_HOST_PASSWORD', default='defaultpass') DEFAULT_FROM_EMAIL = EMAIL_HOST_USER +VALID_EMAIL_DOMAINS = env.str('VALID_EMAIL_DOMAINS', default='defaultdomain') USER_CONFIRMATION_URL = env.str('USER_CONFIRMATION_URL', default='http://localhost:3000') USER_PASSWORD_RESET_URL = env.str( @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-24 17:41+0300\n" +"POT-Creation-Date: 2025-03-24 18:01+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME