From 8c81009a04e76237b5ede064c3ab358499153e4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Fri, 21 Nov 2025 15:46:02 +0300 Subject: [PATCH] Fix registration: update LDAP paths, fix email verification create_user call --- backend/api/v1/employees/views.py | 5 +- backend/test_email.py | 114 ++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 backend/test_email.py diff --git a/backend/api/v1/employees/views.py b/backend/api/v1/employees/views.py index 480e60df..c6909e59 100644 --- a/backend/api/v1/employees/views.py +++ b/backend/api/v1/employees/views.py @@ -253,7 +253,10 @@ class VerifyEmailAPIView(APIView): else: # Запись отсутствует - создаём и активируем try: - user = svc.create_user(user, activate=True) + # Создаём пользователя в LDAP + user = svc.create_user(user) + # Активируем его + user = svc.update_user(user, {"is_active": True}) except Exception as create_err: # Если не удалось создать в LDAP, активируем в БД user.is_active = True diff --git a/backend/test_email.py b/backend/test_email.py new file mode 100644 index 00000000..6373d912 --- /dev/null +++ b/backend/test_email.py @@ -0,0 +1,114 @@ +#!/usr/bin/env python3 +""" +Тестовый скрипт для проверки отправки email через SMTP Яндекса +""" +import smtplib +from email.mime.text import MIMEText +from email.mime.multipart import MIMEMultipart + +# Настройки из .env +EMAIL_HOST = "smtp.yandex.ru" +EMAIL_PORT = 465 +EMAIL_USE_SSL = True +EMAIL_HOST_USER = "robotail-info@yandex.ru" +EMAIL_HOST_PASSWORD = "wogrpijpzbtiuptx" +DEFAULT_FROM_EMAIL = "Robotail " + +# Получатель +TO_EMAIL = "igor_26reg@mail.ru" + +def test_email(): + print("=" * 50) + print("Тест отправки email через Яндекс SMTP") + print("=" * 50) + print(f"Хост: {EMAIL_HOST}:{EMAIL_PORT}") + print(f"От кого: {EMAIL_HOST_USER}") + print(f"Кому: {TO_EMAIL}") + print(f"SSL: {EMAIL_USE_SSL}") + print() + + # Создаем сообщение + msg = MIMEMultipart('alternative') + msg['Subject'] = "Тестовое письмо - проверка SMTP" + msg['From'] = DEFAULT_FROM_EMAIL + msg['To'] = TO_EMAIL + + # Текст письма + text = "Это тестовое письмо для проверки настроек SMTP." + html = """ + + + +

Тестовое письмо

+

Это тестовое письмо для проверки настроек SMTP Яндекса.

+

Если вы получили это письмо, значит настройки корректны.

+ + + """ + + part1 = MIMEText(text, 'plain', 'utf-8') + part2 = MIMEText(html, 'html', 'utf-8') + msg.attach(part1) + msg.attach(part2) + + try: + print("Подключение к SMTP серверу...") + if EMAIL_USE_SSL: + server = smtplib.SMTP_SSL(EMAIL_HOST, EMAIL_PORT, timeout=10) + else: + server = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT, timeout=10) + server.starttls() + + print("✓ Подключение установлено") + + print("Авторизация...") + server.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD) + print("✓ Авторизация успешна") + + print("Отправка письма...") + server.send_message(msg) + print("✓ Письмо отправлено!") + + server.quit() + print() + print("=" * 50) + print("SUCCESS! Письмо успешно отправлено на", TO_EMAIL) + print("=" * 50) + + except smtplib.SMTPAuthenticationError as e: + print() + print("=" * 50) + print("ОШИБКА АВТОРИЗАЦИИ!") + print("=" * 50) + print(f"Код ошибки: {e.smtp_code}") + print(f"Сообщение: {e.smtp_error.decode('utf-8')}") + print() + print("Возможные причины:") + print("1. Неверный пароль приложения") + print("2. Доступ заблокирован для данного IP-адреса") + print("3. Необходимо создать новый пароль приложения в настройках Яндекса") + print() + print("Решение:") + print("1. Зайдите на https://passport.yandex.ru/profile") + print("2. Перейдите в раздел 'Пароли и авторизация'") + print("3. Создайте новый пароль приложения") + print("4. Обновите EMAIL_HOST_PASSWORD в .env файле") + + except smtplib.SMTPException as e: + print() + print("=" * 50) + print("ОШИБКА SMTP!") + print("=" * 50) + print(f"Ошибка: {e}") + + except Exception as e: + print() + print("=" * 50) + print("ОБЩАЯ ОШИБКА!") + print("=" * 50) + print(f"Ошибка: {e}") + import traceback + traceback.print_exc() + +if __name__ == "__main__": + test_email()