Fix registration: update LDAP paths, fix email verification create_user call

This commit is contained in:
admin i 2025-11-21 15:46:02 +03:00
parent 4e8807ba35
commit 8c81009a04
2 changed files with 118 additions and 1 deletions

View File

@ -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

114
backend/test_email.py Normal file
View File

@ -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 <robotail-info@yandex.ru>"
# Получатель
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 = """
<html>
<head></head>
<body>
<h2>Тестовое письмо</h2>
<p>Это тестовое письмо для проверки настроек SMTP Яндекса.</p>
<p>Если вы получили это письмо, значит настройки корректны.</p>
</body>
</html>
"""
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()